eoss-ui 0.8.19 → 0.8.21

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 (181) hide show
  1. package/lib/calogin.js +233 -233
  2. package/lib/eoss-ui.common.js +795 -796
  3. package/lib/flow.js +252 -254
  4. package/lib/index.js +1 -1
  5. package/lib/main.js +283 -283
  6. package/lib/qr-code.js +13 -13
  7. package/lib/theme-chalk/index.css +1 -1
  8. package/lib/theme-chalk/login.css +1 -1
  9. package/lib/upload.js +6 -5
  10. package/package.json +2 -2
  11. package/packages/button/index.js +5 -5
  12. package/packages/button/src/main.vue +418 -418
  13. package/packages/button-group/index.js +5 -5
  14. package/packages/calendar/index.js +5 -5
  15. package/packages/calogin/index.js +5 -5
  16. package/packages/calogin/src/plugin.js +915 -915
  17. package/packages/card/index.js +5 -5
  18. package/packages/card/src/main.vue +156 -156
  19. package/packages/cascader/index.js +5 -5
  20. package/packages/cascader/src/main.vue +168 -168
  21. package/packages/checkbox-group/index.js +5 -5
  22. package/packages/checkbox-group/src/main.vue +333 -333
  23. package/packages/clients/index.js +5 -5
  24. package/packages/data-table/index.js +5 -5
  25. package/packages/data-table/src/children.vue +46 -46
  26. package/packages/data-table/src/main.vue +1876 -1876
  27. package/packages/data-table/src/sizer.vue +195 -195
  28. package/packages/data-table-form/index.js +5 -5
  29. package/packages/data-table-form/src/checkbox.vue +101 -101
  30. package/packages/data-table-form/src/colgroup.vue +17 -17
  31. package/packages/data-table-form/src/main.vue +181 -181
  32. package/packages/data-table-form/src/radio.vue +65 -65
  33. package/packages/data-table-form/src/table.vue +233 -233
  34. package/packages/data-table-form/src/tbody.vue +336 -336
  35. package/packages/data-table-form/src/thead.vue +68 -68
  36. package/packages/date-picker/index.js +5 -5
  37. package/packages/date-picker/src/main.vue +236 -236
  38. package/packages/dialog/index.js +5 -5
  39. package/packages/enable-drag/index.js +5 -5
  40. package/packages/enterprise/index.js +5 -5
  41. package/packages/enterprise/src/main.vue +66 -66
  42. package/packages/error-page/index.js +5 -5
  43. package/packages/error-page/src/main.vue +44 -44
  44. package/packages/flow/index.js +5 -5
  45. package/packages/flow/src/component/Circulate.vue +420 -420
  46. package/packages/flow/src/component/CustomPreset.vue +324 -324
  47. package/packages/flow/src/component/FreeCirculation.vue +245 -245
  48. package/packages/flow/src/component/Preset.vue +257 -257
  49. package/packages/flow/src/component/TimeLimit.vue +190 -190
  50. package/packages/flow/src/component/taskUnionExamine.vue +763 -763
  51. package/packages/flow/src/freeStartFlow.vue +2898 -2898
  52. package/packages/flow/src/main.vue +4248 -4248
  53. package/packages/flow/src/processForm.vue +1806 -1806
  54. package/packages/flow/src/processReject.vue +311 -311
  55. package/packages/flow/src/reset.vue +952 -952
  56. package/packages/flow/src/startTaskRead.vue +698 -698
  57. package/packages/flow/src/supervise.vue +162 -162
  58. package/packages/flow-group/index.js +5 -5
  59. package/packages/flow-group/src/main.vue +750 -750
  60. package/packages/flow-list/index.js +5 -5
  61. package/packages/form/index.js +5 -5
  62. package/packages/handle-user/index.js +5 -5
  63. package/packages/handle-user/src/main.vue +137 -137
  64. package/packages/handler/index.js +5 -5
  65. package/packages/handler/src/main.vue +499 -499
  66. package/packages/icon/index.js +5 -5
  67. package/packages/icons/index.js +5 -5
  68. package/packages/icons/src/main.vue +81 -81
  69. package/packages/input/index.js +5 -5
  70. package/packages/input/src/main.vue +356 -356
  71. package/packages/input-number/index.js +5 -5
  72. package/packages/input-number/src/main.vue +106 -106
  73. package/packages/label/index.js +5 -5
  74. package/packages/label/src/main.vue +457 -457
  75. package/packages/layout/index.js +5 -5
  76. package/packages/layout/src/item.vue +152 -152
  77. package/packages/layout/src/main.vue +31 -31
  78. package/packages/login/index.js +5 -5
  79. package/packages/login/src/main.vue +2088 -2088
  80. package/packages/main/index.js +5 -5
  81. package/packages/main/src/default/message.vue +249 -249
  82. package/packages/main/src/default/notice.vue +157 -157
  83. package/packages/main/src/default/userinfo.vue +513 -513
  84. package/packages/main/src/simplicity/index.vue +2335 -2335
  85. package/packages/main/src/simplicity/lists.vue +84 -84
  86. package/packages/main/src/simplicity/router-page.vue +45 -45
  87. package/packages/main/src/simplicity/userinfo.vue +408 -408
  88. package/packages/main/src/simplicityTop/index.vue +2626 -2626
  89. package/packages/main/src/simplicityTop/userinfo.vue +408 -408
  90. package/packages/menu/index.js +5 -5
  91. package/packages/menu/src/main.vue +597 -597
  92. package/packages/nav/index.js +5 -5
  93. package/packages/notify/index.js +5 -5
  94. package/packages/notify/src/main.vue +538 -538
  95. package/packages/page/index.js +5 -5
  96. package/packages/page/src/main.vue +167 -167
  97. package/packages/pagination/index.js +5 -5
  98. package/packages/pagination/src/main.vue +96 -96
  99. package/packages/player/index.js +5 -5
  100. package/packages/player/src/main.vue +194 -194
  101. package/packages/qr-code/index.js +5 -5
  102. package/packages/qr-code/src/main.vue +170 -170
  103. package/packages/radio-group/index.js +6 -6
  104. package/packages/radio-group/src/main.vue +319 -319
  105. package/packages/retrial-auth/index.js +5 -5
  106. package/packages/retrial-auth/src/main.vue +299 -299
  107. package/packages/select/index.js +5 -5
  108. package/packages/select-ganged/index.js +5 -5
  109. package/packages/select-ganged/src/main.vue +724 -724
  110. package/packages/selector/index.js +5 -5
  111. package/packages/selector-panel/index.js +5 -5
  112. package/packages/selector-panel/src/tree.vue +129 -129
  113. package/packages/sizer/index.js +5 -5
  114. package/packages/sizer/src/main.vue +257 -257
  115. package/packages/steps/index.js +5 -5
  116. package/packages/steps/src/main.vue +181 -181
  117. package/packages/switch/index.js +5 -5
  118. package/packages/table-form/index.js +5 -5
  119. package/packages/tabs/index.js +5 -5
  120. package/packages/tabs/src/main.vue +788 -788
  121. package/packages/tabs-panel/index.js +5 -5
  122. package/packages/tabs-panel/src/main.vue +29 -29
  123. package/packages/theme-chalk/src/base.scss +261 -261
  124. package/packages/theme-chalk/src/button-group.scss +176 -176
  125. package/packages/theme-chalk/src/button.scss +24 -24
  126. package/packages/theme-chalk/src/calendar.scss +113 -113
  127. package/packages/theme-chalk/src/card.scss +99 -99
  128. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  129. package/packages/theme-chalk/src/clients.scss +87 -87
  130. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  131. package/packages/theme-chalk/src/date-picker.scss +7 -7
  132. package/packages/theme-chalk/src/dialog.scss +77 -77
  133. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  134. package/packages/theme-chalk/src/enterprise.scss +5 -5
  135. package/packages/theme-chalk/src/error-page.scss +18 -18
  136. package/packages/theme-chalk/src/flow-group.scss +110 -110
  137. package/packages/theme-chalk/src/flow.scss +376 -376
  138. package/packages/theme-chalk/src/handle-user.scss +40 -40
  139. package/packages/theme-chalk/src/icons.scss +99 -99
  140. package/packages/theme-chalk/src/input.scss +9 -9
  141. package/packages/theme-chalk/src/label.scss +24 -24
  142. package/packages/theme-chalk/src/layout.scss +46 -46
  143. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  144. package/packages/theme-chalk/src/nav.scss +111 -111
  145. package/packages/theme-chalk/src/page.scss +3 -3
  146. package/packages/theme-chalk/src/pagination.scss +29 -29
  147. package/packages/theme-chalk/src/player.scss +9 -9
  148. package/packages/theme-chalk/src/qr-code.scss +17 -17
  149. package/packages/theme-chalk/src/radio-group.scss +9 -9
  150. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  151. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  152. package/packages/theme-chalk/src/select.scss +8 -8
  153. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  154. package/packages/theme-chalk/src/sizer.scss +36 -36
  155. package/packages/theme-chalk/src/steps.scss +88 -88
  156. package/packages/theme-chalk/src/switch.scss +3 -3
  157. package/packages/theme-chalk/src/table-form.scss +1 -1
  158. package/packages/theme-chalk/src/tabs.scss +87 -87
  159. package/packages/theme-chalk/src/tips.scss +7 -7
  160. package/packages/theme-chalk/src/toolbar.scss +179 -179
  161. package/packages/theme-chalk/src/tree-group.scss +72 -72
  162. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  163. package/packages/tips/index.js +5 -5
  164. package/packages/toolbar/index.js +5 -5
  165. package/packages/toolbar/src/main.vue +430 -430
  166. package/packages/tree/index.js +5 -5
  167. package/packages/tree-group/index.js +5 -5
  168. package/packages/upload/index.js +5 -5
  169. package/packages/upload/src/main.vue +1345 -1344
  170. package/packages/upload/src/picture.js +15 -15
  171. package/packages/wujie/index.js +5 -5
  172. package/packages/wxlogin/index.js +5 -5
  173. package/packages/wxlogin/src/main.vue +128 -128
  174. package/src/config/api.js +351 -351
  175. package/src/config/image.js +2 -2
  176. package/src/index.js +1 -1
  177. package/src/utils/bus.js +3 -3
  178. package/src/utils/date-util.js +312 -312
  179. package/src/utils/http.js +50 -50
  180. package/src/utils/store.js +21 -21
  181. package/src/utils/webSocket.js +107 -107
@@ -1,1806 +1,1806 @@
1
- <template>
2
- <div
3
- v-loading="loading"
4
- class="es-flow-form"
5
- element-loading-text="加载中..."
6
- element-loading-spinner="el-icon-loading"
7
- element-loading-background="rgba(255, 255,255, 0.8)"
8
- >
9
- <el-form
10
- ref="nextNode"
11
- :model="nextNode"
12
- class="demo-dynamic"
13
- label-width="100px"
14
- :rules="rules"
15
- :label-position="labelPosition"
16
- >
17
- <div
18
- :style="`height:${showBtn ? '430px' : 'auto'}; overflow-y:${
19
- showBtn ? 'auto' : 'hidden'
20
- } ; margin-bottom: 10px;overflow-x: hidden;`"
21
- >
22
- <el-form-item
23
- v-show="showBtn"
24
- prop="nodeName"
25
- label="当前节点"
26
- :rules="[
27
- { required: true, message: `请选择下步节点`, trigger: 'blur' }
28
- ]"
29
- >
30
- <el-input v-model="nextNode.nodeName" disabled />
31
- </el-form-item>
32
- <el-form-item
33
- v-if="isSinglePage || copyHistory || formType == 'readTransfer'"
34
- prop="newOpinion"
35
- :label="
36
- copyHistory || formType == 'readTransfer' ? '填写意见' : '意见'
37
- "
38
- >
39
- <CommonOpinions
40
- class="opinions"
41
- :opinion="nextNode.newOpinion"
42
- :rows="copyHistory || formType == 'readTransfer' ? 2 : 5"
43
- @change="(val) => (nextNode.newOpinion = val)"
44
- />
45
- </el-form-item>
46
- <el-form-item
47
- prop="nextOperate"
48
- label="下步操作"
49
- v-if="isChooseNextNode == 1"
50
- :rules="[
51
- { required: true, message: `请选择下步操作`, trigger: 'blur' }
52
- ]"
53
- >
54
- <el-select
55
- v-if="nextOperateCheckType == 'select'"
56
- v-model="nextNode.nextOperate"
57
- :placeholder="`请选择下步操作`"
58
- @change="selecNext"
59
- >
60
- <el-option
61
- v-for="items in operationList"
62
- :key="items.key"
63
- :label="items.value"
64
- :value="items.key"
65
- ></el-option>
66
- </el-select>
67
- <es-radio-group
68
- v-else-if="nextOperateCheckType == 'radio'"
69
- v-model="nextNode.nextOperate"
70
- :data="operationList"
71
- @change="selecNext($event, true)"
72
- value-key="key"
73
- label-key="value"
74
- ></es-radio-group>
75
- </el-form-item>
76
- <el-form-item
77
- prop="nextNode"
78
- label="下步节点"
79
- :rules="[
80
- { required: false, message: `请选择下步节点`, trigger: 'blur' }
81
- ]"
82
- >
83
- <el-select
84
- v-if="nextNodeCheckType == 'select'"
85
- v-model="nextNode.nextNode"
86
- :placeholder="`请选择下步节点`"
87
- @change="changeSel"
88
- >
89
- <el-option
90
- v-for="items in nextNode.nodeInfo"
91
- :key="items.id"
92
- :label="items.nodeName"
93
- :value="items.nodeId"
94
- ></el-option>
95
- </el-select>
96
- <es-radio-group
97
- v-else-if="nextNodeCheckType == 'radio'"
98
- v-model="nextNode.nextNode"
99
- :data="nextNode.nodeInfo"
100
- @change="changeSel"
101
- value-key="nodeId"
102
- label-key="nodeName"
103
- ></es-radio-group>
104
- </el-form-item>
105
- <el-form-item
106
- v-if="countersignaturetypeCode != 0"
107
- prop="countersignaturetypeText"
108
- label="处理方式"
109
- >
110
- <el-input
111
- v-model="nextNode.countersignaturetypeText"
112
- placeholder="请输入内容"
113
- disabled
114
- />
115
- </el-form-item>
116
- <!-- <el-form-item
117
- prop="nextNode"
118
- label="下步办理人"
119
- v-if="isShowNextUser"
120
- :rules="[
121
- { required: true, message: `请选择下步办理人`, trigger: 'blur' }
122
- ]"
123
- >
124
- <SelectUser
125
- :nextUser="nextNode.nextUser"
126
- :radioList="radioList"
127
- :multiple="multiple"
128
- :showTooltip="showTooltip"
129
- :isCustomUser="isCustomUser"
130
- :options="options"
131
- :presetEdit="presetEdit"
132
- :isDefSelectedObj="isDefSelectedObj"
133
- :selectUserList="selectUserList"
134
- @change="changeSelectUser"
135
- :types="nextUserTypes"
136
- :params="params"
137
- />
138
- </el-form-item> -->
139
- <el-form-item
140
- v-if="isHideCurrentOrg"
141
- prop="nextCurrentOrgObj"
142
- label="本单位"
143
- >
144
- <SelectUser
145
- :nextUser="nextCurrentOrgObjSelect"
146
- multiple
147
- mix
148
- @change="disposeAppUnit($event, 'nextCurrentOrgObjSelect')"
149
- :showTooltip="showTooltip"
150
- :selectUserList="nextCurrentOrgselectUserList"
151
- :types="currentOrgSelectorTabs"
152
- :params="currentOrgSelectorParams"
153
- />
154
- </el-form-item>
155
- <el-form-item v-if="isHideOtherOrg" label="外单位">
156
- <SelectUser
157
- :nextUser="nextOtherOrgObjSelect"
158
- multiple
159
- :showTooltip="showTooltip"
160
- mix
161
- :where="{ filid: 'other' }"
162
- @change="disposeAppUnit($event, 'nextOtherOrgObjSelect')"
163
- :types="['enterprise', 'filgroup']"
164
- :params="foreignOrgSelectorParams"
165
- />
166
- </el-form-item>
167
- <el-form-item
168
- v-if="!isHideOtherOrg && !isHideCurrentOrg"
169
- :prop="isShowNextUser ? 'nextUser' : 'nextOrgId'"
170
- :label="
171
- isShowNextUser
172
- ? `${flowLabelConfig.nextUser || '下步办理人'}`
173
- : '办理对象'
174
- "
175
- >
176
- <SelectUser
177
- :nextUser="isShowNextUser ? nextNode.nextUser : nextNode.nextOrgId"
178
- :radioList="radioList"
179
- :multiple="multiple"
180
- :isCustomUser="!isShowNextUser ? 1 : isCustomUser"
181
- :showTooltip="showTooltip"
182
- :isCurrentNodeForbiddenChangeCandidate="
183
- isCurrentNodeForbiddenChangeCandidate
184
- "
185
- :options="options"
186
- :presetEdit="presetEdit"
187
- :mix="multiple"
188
- :isDefSelectedObj="isDefSelectedObj"
189
- :selectUserList="selectUserList"
190
- @change="
191
- changeSelectUser(
192
- $event,
193
- isShowNextUser ? 'nextUser' : 'nextOrgId'
194
- )
195
- "
196
- :types="
197
- !isShowNextUser
198
- ? nextUserTypes
199
- : isCdjxjTaskHandle != 'true'
200
- ? ['employee', 'persongroup']
201
- : ['employee']
202
- "
203
- :params="isShowNextUser ? params : {}"
204
- :tabs="nextUserTabs"
205
- />
206
- </el-form-item>
207
- <el-form-item
208
- prop="nextReadUserId"
209
- v-if="isTaskread == 1"
210
- label="
211
- 分阅用户
212
- "
213
- >
214
- <SelectUser
215
- :nextUser="nextNode.nextReadUserId"
216
- :multiple="true"
217
- :selectUserList="selectReadUserList"
218
- :showTooltip="showTooltip"
219
- :options="userOptions"
220
- title="分阅用户"
221
- :mix="true"
222
- :types="types"
223
- @change="changeSelectReadUser($event, 'nextReadUserId')"
224
- :tabs="tabs"
225
- />
226
- </el-form-item>
227
- <el-form-item
228
- prop="presetReadUserId"
229
- v-if="canPresetRead"
230
- label="
231
- 自动分阅
232
- "
233
- >
234
- <SelectUser
235
- :nextUser="nextNode.presetReadUserId"
236
- :multiple="true"
237
- :selectUserList="selectPresetUserList"
238
- :showTooltip="showTooltip"
239
- :options="presetOptions"
240
- title="分阅用户"
241
- :radioList="presetReadUserId"
242
- :presetEdit="1"
243
- :mix="true"
244
- :types="types"
245
- @change="changeSelectReadUser($event, 'presetReadUserId')"
246
- :tabs="tabs"
247
- />
248
- </el-form-item>
249
- <el-form-item
250
- v-if="enableCustomLimitTimeSetting"
251
- prop="customLimitTime"
252
- label="限时办理"
253
- :rules="[
254
- {
255
- required: enableCustomLimitTimeSetting,
256
- message: showCustomLimitTimeText
257
- ? '请输入限时办理天数'
258
- : '请选择限时办理天数',
259
- trigger: 'blur'
260
- },
261
- {
262
- required: enableCustomLimitTimeSetting,
263
- validator: checkCustomLimitTime,
264
- trigger: 'blur'
265
- }
266
- ]"
267
- >
268
- <div style="display: flex">
269
- <es-select
270
- v-model="nextNode.customLimitTimeText"
271
- placeholder="请选择"
272
- @change="handleChangeTime"
273
- :style="`flex:${showBtn ? 'unset' : '1'};width: ${
274
- showBtn ? '20%' : 'unset'
275
- } !important; display: inline-block;`"
276
- sysCode="bpm_custom_limit_time"
277
- ></es-select>
278
- <el-input
279
- v-model="nextNode.customLimitTime"
280
- :style="`flex:${showBtn ? 'unset' : '1'};width: ${
281
- showBtn ? '20%' : 'unset'
282
- } !important; display: inline-block;`"
283
- placeholder="请输入限时办理的天数"
284
- class="input-with-select custom-limit-time"
285
- @change="changeCustomLimitTime"
286
- >
287
- </el-input>
288
- <span style="margin-left: 5px">天</span>
289
- </div>
290
- </el-form-item>
291
- <el-form-item
292
- v-if="isHandleExplain == 1"
293
- prop="handleExplain"
294
- label="办理说明"
295
- >
296
- <el-input
297
- placeholder="请输入办理说明"
298
- v-model="nextNode.handleExplain"
299
- />
300
- </el-form-item>
301
- <el-form-item
302
- prop="noticeType"
303
- label="通知方式"
304
- v-show="showBtn && nextNode.noticeList.length > 0 && !hideMessage"
305
- >
306
- <el-checkbox-group v-model="nextNode.noticeType">
307
- <el-checkbox
308
- v-for="item of nextNode.noticeList"
309
- :key="item.cciValue"
310
- :label="item.cciValue"
311
- :disabled="
312
- readOnlyNotificationType
313
- ? readOnlyNotificationType.indexOf(item.cciValue) != -1
314
- : false
315
- "
316
- >
317
- {{ item.shortName }}
318
- </el-checkbox>
319
- </el-checkbox-group>
320
- </el-form-item>
321
- <el-form-item
322
- v-show="nextNode.noticeType.length != 0 && showBtn"
323
- prop="nextNode"
324
- label="通知消息"
325
- >
326
- <es-input
327
- style="
328
- border-color: #ccc;
329
- padding: 5px;
330
- border-radius: 5px;
331
- font-size: 13px;
332
- "
333
- type="textarea"
334
- v-model="nextNode.noticeInfo"
335
- :readonly="notificationMessageReadOnly"
336
- />
337
- </el-form-item>
338
- <CustomPreset
339
- v-show="isCustomPreset"
340
- ref="customPreset"
341
- @changeCustom="
342
- (data) => {
343
- presetList = data;
344
- }
345
- "
346
- :customPresetHintMessage="customPresetHintMessage"
347
- @changeActiveNames="(val) => (activeNames = val)"
348
- @loadingEnd="loading = false"
349
- @loadingStart="loading = true"
350
- :nextNode="nextNode.nextNode"
351
- :id="id"
352
- :processDefinitionId="processDefinitionId"
353
- />
354
- <Preset
355
- v-show="isPreset"
356
- @changePreset="
357
- (data) => {
358
- presetUserJson = data;
359
- }
360
- "
361
- @loadingEnd="loading = false"
362
- @loadingStart="loading = true"
363
- :customPresetHintMessage="customPresetHintMessage"
364
- :nodeId="nextNode.nextNode"
365
- :businessId="id"
366
- :processDefinitionId="processDefinitionId"
367
- :presetTaskNodeMap="presetTaskNodeMap"
368
- :presetTaskNodeKeyStr="presetTaskNodeKeyStr"
369
- />
370
- </div>
371
- <el-form-item style="margin-bottom: 0px" v-show="showBtn">
372
- <div style="text-align: right">
373
- <el-button type="primary" @click="subProcess('nextNode')">
374
- 确认
375
- </el-button>
376
- <el-button @click="quit"> 取消 </el-button>
377
- </div>
378
- </el-form-item>
379
- </el-form>
380
- <div
381
- v-if="!showBtn && nextNode.noticeList.length > 0 && !hideMessage"
382
- style="padding: 5px; background: #fff"
383
- >
384
- <div class="news" @click="showNews = !showNews">
385
- <span class="news-item">消息通知</span>
386
- <span :class="showNews ? 'show' : 'sj'"></span>
387
- </div>
388
- <div v-if="showNews" ref="messagebox" style="transition: 1s">
389
- <el-checkbox-group v-model="nextNode.noticeType">
390
- <el-checkbox
391
- v-for="item of nextNode.noticeList"
392
- :key="item.cciValue"
393
- :label="item.cciValue"
394
- :disabled="
395
- readOnlyNotificationType
396
- ? readOnlyNotificationType.indexOf(item.cciValue) != -1
397
- : false
398
- "
399
- >
400
- {{ item.shortName }}
401
- </el-checkbox>
402
- </el-checkbox-group>
403
- <es-input
404
- style="
405
- border-color: #ccc;
406
- padding: 5px;
407
- border-radius: 5px;
408
- font-size: 13px;
409
- "
410
- autosize
411
- v-show="showNews"
412
- type="textarea"
413
- v-model="nextNode.noticeInfo"
414
- @change="handleChange"
415
- :readonly="notificationMessageReadOnly"
416
- />
417
- </div>
418
- </div>
419
- </div>
420
- </template>
421
-
422
- <script>
423
- import {
424
- toStartFlow,
425
- getNodeInfo,
426
- findSysCodes,
427
- getNotificationMsg,
428
- findCodeValues,
429
- loginUserInfo,
430
- register,
431
- freeStartFlow,
432
- freeStartFlowWithSubmitTask,
433
- startReadTransferHandleFlowWithTaskReadEnd
434
- } from 'eoss-ui/src/config/api';
435
- import util from 'eoss-ui/src/utils/util';
436
- import SelectUser from './selectUser.vue';
437
- import CommonOpinions from './component/CommonOpinions.vue';
438
- import CustomPreset from './component/CustomPreset.vue';
439
- import Preset from './component/Preset.vue';
440
- export default {
441
- name: 'ProcessForm',
442
-
443
- components: {
444
- [Option.name]: Option,
445
- [SelectUser.name]: SelectUser,
446
- [CustomPreset.name]: CustomPreset,
447
- [CommonOpinions.name]: CommonOpinions,
448
- Preset
449
- },
450
- props: {
451
- processDefinitionId: {
452
- type: String,
453
- default: ''
454
- },
455
- showTooltip: { type: Boolean, default: true },
456
- copyHistory: {
457
- type: String,
458
- default: ''
459
- },
460
- simpleTips: {
461
- type: Boolean,
462
- default: true
463
- },
464
- formType: {
465
- type: String,
466
- default: 'freeStart'
467
- },
468
- id: {
469
- type: String,
470
- default: ''
471
- },
472
- pendingId: {
473
- type: String,
474
- default: ''
475
- },
476
- opinion: {
477
- type: String,
478
- default: ''
479
- },
480
- isCancelSecondConfirmationType: {
481
- type: Boolean,
482
- default: false
483
- },
484
- isFreeStartFlow: {
485
- type: Boolean,
486
- default: false
487
- },
488
- taskParams: {
489
- type: Object,
490
- default: () => {}
491
- },
492
- taskExamineParam: {
493
- type: String,
494
- default: ''
495
- },
496
- labelPosition: {
497
- type: String,
498
- default: 'right'
499
- },
500
- formTitle: {
501
- type: String,
502
- default: ''
503
- },
504
- showBtn: { type: Boolean, default: true },
505
- messageType: {
506
- type: Array,
507
- default: () => []
508
- },
509
- urgencyLevel: {
510
- type: [Number, String],
511
- default: ''
512
- },
513
- keyCount: {
514
- type: [Number, String],
515
- default: 0
516
- },
517
- selectorParams: { type: Object, default: () => {} },
518
- flowLabelConfig: {
519
- type: Object,
520
- default: () => {
521
- return {};
522
- }
523
- },
524
- hideMessage: { type: Boolean, default: false }
525
- },
526
- data() {
527
- return {
528
- loading: false,
529
- isCustomUser: 0,
530
- isCurrentNodeForbiddenChangeCandidate: 0,
531
- allLoading: null,
532
- selectUser: false,
533
- multiple: false,
534
- readMultiple: true,
535
- currentOrgSelectorTabs: ['employee', 'persongroup'],
536
- customPresetHintMessage: '', //流程预设标题
537
- nextNodeCheckType: 'select',
538
- nextOperateCheckType: 'select',
539
- showNews: false, // 是否展示通知信息
540
- notificationMessageReadOnly: false,
541
- isChangeMessage: false,
542
- readOnlyNotificationType: '',
543
- show: true,
544
- enableCustomLimitTimeSetting: false,
545
- radioList: [],
546
- nextCurrentOrgselectUserList: [],
547
- showCustomLimitTimeText: false,
548
- activeNames: '',
549
- selectUserList: [],
550
- defaultNextNode: '',
551
- presetUserJson: [],
552
- businessId: '',
553
- isTaskread: 0, //是否显示分阅用户
554
- isHandleExplain: 0, //是否展示办理说明
555
- options: [],
556
- presetList: [],
557
- presetReadUserId: [], //自动分阅
558
- canPresetRead: false, //是否展示自动分阅
559
- nextUserTypes: ['employee', 'persongroup'],
560
- isCustomPreset: false, //是否展示预设节点
561
- isPreset: false, //是否展示预设办理人
562
- isSinglePage: false,
563
- presetEdit: 0,
564
- isDefSelectedObj: 0,
565
- isChooseNextNode: 0,
566
- isHideDefaultOperation: 0,
567
- countersignaturetypeCode: 0,
568
- presetTaskNodeKeyStr: '', //预设办理人顺序
569
- presetTaskNodeMap: {}, //预设办理人
570
- params: {
571
- filid: 'all', //选择范围(my:本单位/ "" or all:全部)
572
- selectmix: 'true1',
573
- deptid: '' //指定部门(my:本部门)
574
- },
575
- newOpinion: '',
576
- operationList: [],
577
- tabs: {
578
- employee: {
579
- param: {
580
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
581
- name: '本单位用户'
582
- }
583
- },
584
- department: {
585
- param: {
586
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
587
- }
588
- }
589
- },
590
- userModel: {},
591
- nextUserTabs: {},
592
- selectPresetUserList: [],
593
- presetOptions: [],
594
- selectReadUserList: [],
595
- userOptions: [],
596
- mixReadList: [],
597
- mixPresetList: [],
598
- isCdjxjTaskHandle: '',
599
- isShowNextUser: true,
600
- oldMessage: '',
601
- mixOrgIdList: [], //办理对象混选
602
- subProcessColumns: [],
603
- nextOtherOrgObjSelect: [],
604
- nextCurrentOrgObjSelect: [],
605
- isHideCurrentOrg: false,
606
- isHideOtherOrg: false,
607
- currentOrgSelectorParams: {
608
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
609
- only_filid: true
610
- },
611
- foreignOrgSelectorParams: { filid: 'all', nofilid: 1 },
612
- nextNode: {
613
- nodeName: '',
614
- customLimitTime: '',
615
- customLimitTimeText: '',
616
- newOpinion: '',
617
- countersignaturetypeText: '',
618
- nextNode: '',
619
- nextReadUserId: [],
620
- nextOrgId: [],
621
- noticeType: [],
622
- nextOperate: '',
623
- nextUser: [],
624
- presetReadUserId: [], //自动分阅
625
- noticeInfo: '',
626
- nodeInfo: [],
627
- userInfo: [],
628
- handleExplain: '',
629
- noticeList: [],
630
- msgTypeCount: 0
631
- }
632
- };
633
- },
634
- watch: {
635
- messageType: {
636
- handler(val) {
637
- if (this.urgencyLevel) {
638
- this.nextNode.noticeList = val;
639
- let arr = [];
640
- this.nextNode.noticeList.map((item) => {
641
- this.nextNode.noticeType.map((x) => {
642
- if (x == item.cciValue) {
643
- arr.push(x);
644
- }
645
- });
646
- });
647
- this.nextNode.noticeType = arr;
648
- } else {
649
- this.msgTypeCount++;
650
- }
651
- }
652
- },
653
- processDefinitionId(val) {
654
- Object.assign(this.$data, this.$options.data());
655
- this.getUserInfo();
656
- this.getNodeType();
657
- this.getStartFlow(val);
658
- if (this.copyHistory) {
659
- this.nextNode.newOpinion = this.opinion;
660
- } else if (this.formType != 'readTransfer') {
661
- this.newOpinion = this.opinion;
662
- }
663
- // this.getStartFlow(val);
664
- },
665
- opinion(val) {
666
- this.newOpinion = this.opinion;
667
- },
668
- formTitle: {
669
- handler(val) {
670
- if (!this.showBtn && !this.isChangeMessage) {
671
- this.nextNode.noticeInfo = this.oldMessage.replace('{title}', val);
672
- }
673
- },
674
- deep: true,
675
- immediate: true
676
- }
677
- },
678
- computed: {
679
- rules() {
680
- return {
681
- customLimitTime: [
682
- {
683
- required: this.enableCustomLimitTimeSetting,
684
- message: this.showCustomLimitTimeText
685
- ? '请输入限时办理天数'
686
- : '请选择限时办理天数',
687
- trigger: 'blur'
688
- },
689
- {
690
- required: this.enableCustomLimitTimeSetting,
691
- validator: this.checkCustomLimitTime,
692
- trigger: 'blur'
693
- }
694
- ]
695
- };
696
- },
697
- types() {
698
- if (this.isCdjxjTaskHandle == 'true') {
699
- return ['employee', 'enterprise', 'department'];
700
- } else {
701
- return ['employee', 'enterprise', 'department', 'persongroup'];
702
- }
703
- }
704
- },
705
- created() {
706
- this.getUserInfo();
707
- },
708
- mounted() {
709
- if (!this.urgencyLevel) {
710
- this.getNodeType();
711
- }
712
- this.getStartFlow(this.processDefinitionId);
713
- if (this.copyHistory) {
714
- this.nextNode.newOpinion = this.opinion;
715
- } else if (this.formType != 'readTransfer') {
716
- this.newOpinion = this.opinion;
717
- }
718
- },
719
- methods: {
720
- handleChangeTime(val) {
721
- this.nextNode.customLimitTime = val;
722
- },
723
- limitTimevalidate() {
724
- let validSate = true;
725
- this.$refs.nextNode.validate((valid) => {
726
- if (valid) {
727
- validSate = true;
728
- } else {
729
- validSate = false;
730
- }
731
- });
732
- return validSate;
733
- },
734
- checkCustomLimitTime(rule, value, callback) {
735
- if (!Number(value) || value.indexOf('.') != -1 || Number(value) < 0) {
736
- callback(new Error('请输入正确的天数'));
737
- this.nextNode.customLimitTime = '';
738
- } else {
739
- callback();
740
- }
741
- },
742
- handleChange() {
743
- this.isChangeMessage = true;
744
- },
745
- changeCustomLimitTime(val) {
746
- if (!Number(val) || val.indexOf('.') != -1 || Number(val) < 0) {
747
- this.$message.warning('请输入正确的天数');
748
- this.nextNode.customLimitTime = '';
749
- }
750
- },
751
- getUserInfo() {
752
- let mainConfig = util.getStorage('mainConfig');
753
- if (mainConfig) {
754
- this.userModel = JSON.parse(mainConfig).userModel;
755
- this.foreignOrgSelectorParams.nofilid = this.userModel.orgId;
756
- this.foreignOrgSelectorParams.roleid =
757
- this.currentOrgSelectorParams.roleid = this.selectorParams.roleid;
758
- } else {
759
- util
760
- .ajax({ url: loginUserInfo })
761
- .then((res) => {
762
- const { status, data } = res;
763
- if (status == 'success') {
764
- this.userModel = data;
765
- this.foreignOrgSelectorParams.nofilid = this.userModel.orgId;
766
- this.foreignOrgSelectorParams.roleid =
767
- tthis.currentOrgSelectorParams.roleid =
768
- this.selectorParams.roleid;
769
- } else {
770
- let msg = res.msg || '系统错误,请联系管理员!';
771
- this.$message.error(msg);
772
- }
773
- })
774
- .catch((err) => {
775
- if (err.message && err.message !== 'canceled') {
776
- this.$message.error(err.message);
777
- }
778
- });
779
- }
780
- },
781
- getIsShowNextUser(val) {
782
- if (
783
- val == 7 ||
784
- val == 8 ||
785
- val == 9 ||
786
- val == 10 ||
787
- val == 11 ||
788
- val == 12
789
- ) {
790
- this.isShowNextUser = false;
791
- //设置办理角色
792
- // $("#orgRoleCode").val(handleRoleId);
793
- if (val == 7 || val == 8) {
794
- this.nextUserTypes = ['department'];
795
- this.nextUserTabs = {
796
- department: {
797
- param: {
798
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
799
- }
800
- }
801
- };
802
- this.multiple = true;
803
- } else if (val == 9 || val == 10) {
804
- this.nextUserTypes = ['enterprise'];
805
- this.nextUserTabs = { enterprise: { param: { filid: 'other' } } };
806
- this.multiple = true;
807
- } else if (val == 11 || val == 12) {
808
- this.nextUserTypes = ['department', 'enterprise'];
809
- this.nextUserTabs = {
810
- enterprise: { param: { filid: 'other' } },
811
- department: {
812
- param: {
813
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
814
- }
815
- }
816
- };
817
- this.multiple = true;
818
- }
819
- }
820
- if (val == 7 || val == 9 || val == 11) {
821
- this.multiple = false;
822
- }
823
- },
824
- // 分阅是否多选
825
- isReadMultiple(nextReadUserSelectType) {
826
- if (nextReadUserSelectType == 1) {
827
- this.readMultiple = false;
828
- } else if (nextReadUserSelectType == 2) {
829
- this.readMultiple = true;
830
- } else if (nextReadUserSelectType == 3) {
831
- this.readMultiple = false;
832
- } else if (nextReadUserSelectType == 4) {
833
- this.readMultiple = true;
834
- } else if (nextReadUserSelectType == 5) {
835
- this.readMultiple = false;
836
- } else if (nextReadUserSelectType == 6) {
837
- this.readMultiple = true;
838
- }
839
- },
840
- changeSelectReadUser(val, type) {
841
- const { nextUser, mixList } = val;
842
- this.nextNode[type] = nextUser;
843
- if (type === 'presetReadUserId') {
844
- this.mixPresetList = mixList;
845
- } else {
846
- this.mixReadList = mixList;
847
- }
848
- },
849
- selecNext(val) {
850
- this.nextNode.nextUser = [];
851
- this.options = [];
852
- this.selectUserList = [];
853
- this.radioList = [];
854
- if (this.showBtn) {
855
- this.loading = true;
856
- } else {
857
- this.allLoading = util.loading(this.$loading, '加载中...');
858
- }
859
- this.nextNode.nodeInfo = this.operationList[val].list;
860
- if (this.nextNode.nodeInfo.length > 0) {
861
- let defaultNodeData = this.nextNode.nodeInfo.filter(
862
- (x) => x.nodeId == this.defaultNextNode
863
- );
864
- length;
865
- this.nextNode.nextNode =
866
- defaultNodeData.length > 0
867
- ? this.defaultNextNode
868
- : this.nextNode.nodeInfo[0].nodeId;
869
- }
870
- this.getNodeInfos();
871
- },
872
- changeSelectUser(val, type) {
873
- const { nextUser, options, mixList } = val;
874
- this.nextNode[type] = nextUser;
875
- this.mixOrgIdList = mixList;
876
- },
877
- getsubProcessColumns() {
878
- let data = [];
879
- let obj = { name: '[部门员工]-' };
880
- if (this.nextCurrentOrgObjSelect.length > 0) {
881
- this.nextCurrentOrgObjSelect.map((x) => {
882
- if (x.stype == 'employee') {
883
- obj.name = !obj.value
884
- ? obj.name + x.showname
885
- : obj.name + ',' + x.showname;
886
- obj.value = obj.value
887
- ? obj.value + ',' + x.showid
888
- : 'employee-' + x.showid;
889
- } else {
890
- data.push({
891
- name: '[部门]' + x.showname,
892
- value: 'department-' + x.showid
893
- });
894
- }
895
- });
896
- }
897
- obj.value && data.push(obj);
898
- if (this.nextOtherOrgObjSelect.length > 0) {
899
- this.nextOtherOrgObjSelect.map((x) => {
900
- data.push({
901
- name: '[企业]' + x.showname,
902
- value: 'enterprise-' + x.showid
903
- });
904
- });
905
- }
906
- this.subProcessColumns = data;
907
- // return data;
908
- },
909
- // 单位选择完回调
910
- disposeAppUnit(res, type) {
911
- let label = type.substring(0, type.lastIndexOf('Select'));
912
- this.nextNode[label + 'Name'] = '';
913
- res.options && (this[type] = res.options);
914
- let obj = {};
915
- // if (typeof res.mixList == 'array')
916
- res.mixList && (this.nextNode[label] = res.mixList.join('|'));
917
- res.options.map((item) => {
918
- if (obj[item.stype]) {
919
- obj[item.stype].push(item.showname);
920
- } else {
921
- obj[item.stype] = [item.showname];
922
- }
923
- });
924
- for (let key in obj) {
925
- if (
926
- key === 'enterprise' &&
927
- this.nextNode[label + 'Name'].indexOf('[企业]') == -1
928
- ) {
929
- this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
930
- ? this.nextNode[label + 'Name'] +
931
- '|' +
932
- '[企业]-' +
933
- obj[key].join(',')
934
- : '' + '[企业]-' + obj[key].join(',');
935
- }
936
- if (
937
- key === 'department' &&
938
- this.nextNode[label + 'Name'].indexOf('[部门]') == -1
939
- ) {
940
- this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
941
- ? this.nextNode[label + 'Name'] +
942
- '|' +
943
- '[部门]-' +
944
- obj[key].join(',')
945
- : '' + '[部门]-' + obj[key].join(',');
946
- }
947
- if (
948
- key === 'employee' &&
949
- this.nextNode[label + 'Name'].indexOf('[部门员工]') == -1
950
- ) {
951
- this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
952
- ? this.nextNode[label + 'Name'] +
953
- '|' +
954
- '[部门员工]-' +
955
- obj[key].join(',')
956
- : '' + '[部门员工]-' + obj[key].join(',');
957
- }
958
- }
959
- // this.nextNode[label + 'Name'] = obj.enterprise?;
960
- if (!this.currentNodeIsCircularReadNode) {
961
- this.nextNode[label + 'SerialId'] = res.nextUser.join(',');
962
- this.nextNode[label + 'Json'] = JSON.stringify(res.options);
963
- }
964
- this.getsubProcessColumns();
965
- },
966
- getNodeType() {
967
- util
968
- .ajax({
969
- url: findCodeValues,
970
- params: {
971
- ccCode: 'notification_type',
972
- userId: util.getStorage('userId')
973
- }
974
- })
975
- .then((res) => {
976
- const { status, data } = res;
977
- if (status === 'success') {
978
- this.nextNode.noticeList = data;
979
- }
980
- })
981
- .catch((err) => {
982
- if (this.showBtn) {
983
- this.loading = false;
984
- } else {
985
- this.allLoading.close();
986
- }
987
- if (err.message && err.message !== 'canceled') {
988
- this.$message.error(err.message);
989
- }
990
- });
991
- },
992
- //获取通知信息
993
- getMessage() {
994
- let params = {
995
- processDefinitionId: this.processDefinitionId,
996
- nodeId: this.nextNode.nextNode,
997
- businessId: this.id
998
- };
999
- if (!this.showBtn) {
1000
- params.openMode = 'samepage';
1001
- }
1002
- util
1003
- .ajax({ url: getNotificationMsg, params, methods: 'post' })
1004
- .then((res) => {
1005
- if (res.status === 'success') {
1006
- if (!this.showBtn) {
1007
- this.oldMessage = res.message;
1008
- this.nextNode.noticeInfo = res.message.replace(
1009
- '{title}',
1010
- this.formTitle
1011
- );
1012
- } else {
1013
- this.nextNode.noticeInfo = res.message;
1014
- }
1015
- }
1016
- })
1017
- .catch((err) => {
1018
- if (this.showBtn) {
1019
- this.loading = false;
1020
- } else {
1021
- this.allLoading.close();
1022
- }
1023
- if (err.message && err.message !== 'canceled') {
1024
- this.$message.error(err.message);
1025
- }
1026
- });
1027
- },
1028
- // 提交表单
1029
- subProcess(formName) {
1030
- this.saveProcess(formName);
1031
- },
1032
- saveProcess(formName) {
1033
- this.$refs[formName].validate((valid) => {
1034
- if (valid) {
1035
- const {
1036
- nextNode,
1037
- nextUser,
1038
- noticeInfo,
1039
- noticeType,
1040
- handleExplain,
1041
- presetReadUserId,
1042
- nextReadUserId,
1043
- nextOrgId,
1044
- newOpinion,
1045
- customLimitTime,
1046
- nextOtherOrgObj,
1047
- nextCurrentOrgObj
1048
- } = this.nextNode;
1049
- // if (noticeType.length === 0) {
1050
- // return this.$message.warning('请选择通知方式');
1051
- // }
1052
- if (this.isShowNextUser) {
1053
- if (
1054
- (nextUser == '' || (this.multiple && nextUser.length == 0)) &&
1055
- !this.isHideCurrentOrg &&
1056
- !this.isHideOtherOrg
1057
- ) {
1058
- return this.$message.warning(
1059
- `请选择${this.flowLabelConfig.nextUser || '下步办理人'}`
1060
- );
1061
- }
1062
- } else {
1063
- if (nextOrgId == '' || (this.multiple && nextOrgId.length == 0)) {
1064
- return this.$message.warning('请选择办理对象');
1065
- }
1066
- }
1067
- if (
1068
- (this.isHideOtherOrg || this.isHideCurrentOrg) &&
1069
- !nextCurrentOrgObj &&
1070
- !nextOtherOrgObj
1071
- ) {
1072
- return this.$message.warning('请选择办理对象');
1073
- }
1074
- if (this.isCancelSecondConfirmationType) {
1075
- this.$confirm('确认提交吗?', '提示', {
1076
- confirmButtonText: '确定',
1077
- cancelButtonText: '取消',
1078
- type: 'warning'
1079
- }).then(() => {
1080
- if (this.showBtn) {
1081
- this.loading = true;
1082
- } else {
1083
- this.allLoading = util.loading(this.$loading, '加载中...');
1084
- }
1085
- let newNextUser = [];
1086
- if (this.multiple) {
1087
- nextUser && nextUser.map((item) => newNextUser.push(item));
1088
- }
1089
- let newNoticeType = '';
1090
- if (noticeType) {
1091
- newNoticeType = noticeType.join(',');
1092
- }
1093
- let params = {
1094
- processDefinitionId: this.processDefinitionId,
1095
- nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
1096
- nextNodeId: nextNode,
1097
- businessId: this.businessId,
1098
- notificationType: newNoticeType,
1099
- userId: util.getStorage('userId'),
1100
- notificationMsg: noticeInfo,
1101
- customPresetUserJson: JSON.stringify(this.presetList),
1102
- presetUserJson: JSON.stringify(this.presetUserJson),
1103
- nextReadUserId: this.readMultiple
1104
- ? this.mixReadList && this.mixReadList.join('|')
1105
- : nextReadUserId,
1106
- nextOrgId: !this.isShowNextUser
1107
- ? this.multiple
1108
- ? this.mixOrgIdList && this.mixOrgIdList.join('|')
1109
- : nextOrgId
1110
- : '',
1111
- handleExplain: handleExplain,
1112
- presetReadUserId:
1113
- this.mixPresetList && this.mixPresetList.length > 0
1114
- ? this.mixPresetList.join('|')
1115
- : presetReadUserId.join(','),
1116
- opinion: this.newOpinion || newOpinion
1117
- };
1118
- if (this.enableCustomLimitTimeSetting) {
1119
- params.customLimitTime = customLimitTime;
1120
- if (!customLimitTime) {
1121
- this.$message.warning('请选择或输入限时办理的天数');
1122
- this.nextNode.customLimitTime = '';
1123
- return;
1124
- } else if (
1125
- !Number(customLimitTime) ||
1126
- customLimitTime.indexOf('.') != -1 ||
1127
- Number(customLimitTime) < 0
1128
- ) {
1129
- this.$message.warning('请输入正确的天数');
1130
- this.nextNode.customLimitTime = '';
1131
- return;
1132
- }
1133
- }
1134
- if (this.isHideCurrentOrg) {
1135
- params.nextCurrentOrgObj = nextCurrentOrgObj;
1136
- }
1137
- if (this.isHideOtherOrg) {
1138
- params.nextOtherOrgObj = nextOtherOrgObj;
1139
- }
1140
- if (this.activeNames != '1') delete params.customPresetUserJson;
1141
- if (this.isFreeStartFlow || this.formType === 'readTransfer') {
1142
- let newParm = {};
1143
- newParm.copyHistory =
1144
- this.copyHistory === 'needCopyPendedHistory';
1145
- newParm.startFlowParamJson = params;
1146
- // newParm.startFlowParamJson.businessId = this.id; //this.id
1147
- newParm.startFlowParamJson.taskExamineParam = {
1148
- startFlowFirstNodeName: this.taskExamineParam
1149
- };
1150
- newParm.startFlowParamJson = JSON.stringify(
1151
- newParm.startFlowParamJson
1152
- );
1153
- for (let key in this.taskParams) {
1154
- if (Array.isArray(this.taskParams[key])) {
1155
- this.taskParams[key] =
1156
- this.taskParams[key].length > 0
1157
- ? this.taskParams[key].join(',')
1158
- : '';
1159
- }
1160
- }
1161
-
1162
- newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
1163
- if (this.formType == 'readTransfer') {
1164
- newParm.readTransferHandleStartFlowParamJson =
1165
- JSON.stringify(params);
1166
- newParm.taskReadEndParamJson = JSON.stringify(
1167
- this.taskParams
1168
- );
1169
- delete newParm.copyHistory;
1170
- delete newParm.startFlowParamJson;
1171
- delete newParm.submitTaskParamJson;
1172
- }
1173
- params = newParm;
1174
- }
1175
- if (this.copyHistory && !this.isFreeStartFlow) {
1176
- params.pendingId = this.pendingId;
1177
- delete params.businessId;
1178
- }
1179
- util
1180
- .ajax({
1181
- url: this.isFreeStartFlow
1182
- ? freeStartFlowWithSubmitTask
1183
- : this.formType == 'readTransfer'
1184
- ? startReadTransferHandleFlowWithTaskReadEnd
1185
- : this.copyHistory
1186
- ? freeStartFlow
1187
- : register,
1188
- method: 'post',
1189
- data: params
1190
- })
1191
- .then((res) => {
1192
- const { status, message } = res;
1193
- if (this.showBtn) {
1194
- this.loading = false;
1195
- } else {
1196
- this.allLoading.close();
1197
- }
1198
- if (status === 'success' || res.rCode == 0) {
1199
- this.quit(true);
1200
- this.simpleTips && this.$message.success('操作成功');
1201
- } else {
1202
- this.$message.error(message || '系统错误,请联系管理员!');
1203
- }
1204
- })
1205
- .catch((err) => {
1206
- if (this.showBtn) {
1207
- this.loading = false;
1208
- } else {
1209
- this.allLoading.close();
1210
- }
1211
- if (err.message && err.message !== 'canceled') {
1212
- this.$message.error(err.message);
1213
- }
1214
- });
1215
- });
1216
- return;
1217
- }
1218
- if (this.showBtn) {
1219
- this.loading = true;
1220
- } else {
1221
- this.allLoading = util.loading(this.$loading, '加载中...');
1222
- }
1223
- let newNextUser = [];
1224
- if (this.multiple) {
1225
- nextUser && nextUser.map((item) => newNextUser.push(item));
1226
- }
1227
- let newNoticeType = '';
1228
- if (noticeType) {
1229
- newNoticeType = noticeType.join(',');
1230
- }
1231
- let params = {
1232
- processDefinitionId: this.processDefinitionId,
1233
- nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
1234
- nextNodeId: nextNode,
1235
- businessId: this.businessId,
1236
- notificationType: newNoticeType,
1237
- userId: util.getStorage('userId'),
1238
- notificationMsg: noticeInfo,
1239
- customPresetUserJson: JSON.stringify(this.presetList),
1240
- presetUserJson: JSON.stringify(this.presetUserJson),
1241
- nextReadUserId: this.readMultiple
1242
- ? this.mixReadList && this.mixReadList.join('|')
1243
- : nextReadUserId,
1244
- nextOrgId: !this.isShowNextUser
1245
- ? this.multiple
1246
- ? this.mixOrgIdList && this.mixOrgIdList.join('|')
1247
- : nextOrgId
1248
- : '',
1249
- handleExplain: handleExplain,
1250
- presetReadUserId:
1251
- this.mixPresetList && this.mixPresetList.length > 0
1252
- ? this.mixPresetList.join('|')
1253
- : presetReadUserId.join(','),
1254
- opinion: this.newOpinion || newOpinion
1255
- };
1256
- if (this.enableCustomLimitTimeSetting) {
1257
- params.customLimitTime = customLimitTime;
1258
- if (!customLimitTime) {
1259
- this.$message.warning('请选择或输入限时办理的天数');
1260
- this.nextNode.customLimitTime = '';
1261
- return;
1262
- } else if (
1263
- !Number(customLimitTime) ||
1264
- customLimitTime.indexOf('.') != -1 ||
1265
- Number(customLimitTime) < 0
1266
- ) {
1267
- this.$message.warning('请输入正确的天数');
1268
- this.nextNode.customLimitTime = '';
1269
- return;
1270
- }
1271
- }
1272
- if (this.isHideCurrentOrg) {
1273
- params.nextCurrentOrgObj = nextCurrentOrgObj;
1274
- }
1275
- if (this.isHideOtherOrg) {
1276
- params.nextOtherOrgObj = nextOtherOrgObj;
1277
- }
1278
- if (this.activeNames != '1') delete params.customPresetUserJson;
1279
- if (this.isFreeStartFlow || this.formType === 'readTransfer') {
1280
- let newParm = {};
1281
- newParm.copyHistory = this.copyHistory === 'needCopyPendedHistory';
1282
- newParm.startFlowParamJson = params;
1283
- // newParm.startFlowParamJson.businessId = this.id; //this.id
1284
- newParm.startFlowParamJson.taskExamineParam = {
1285
- startFlowFirstNodeName: this.taskExamineParam
1286
- };
1287
- newParm.startFlowParamJson = JSON.stringify(
1288
- newParm.startFlowParamJson
1289
- );
1290
- for (let key in this.taskParams) {
1291
- if (Array.isArray(this.taskParams[key])) {
1292
- this.taskParams[key] =
1293
- this.taskParams[key].length > 0
1294
- ? this.taskParams[key].join(',')
1295
- : '';
1296
- }
1297
- }
1298
-
1299
- newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
1300
- if (this.formType == 'readTransfer') {
1301
- newParm.readTransferHandleStartFlowParamJson =
1302
- JSON.stringify(params);
1303
- newParm.taskReadEndParamJson = JSON.stringify(this.taskParams);
1304
- delete newParm.copyHistory;
1305
- delete newParm.startFlowParamJson;
1306
- delete newParm.submitTaskParamJson;
1307
- }
1308
- params = newParm;
1309
- }
1310
- if (this.copyHistory && !this.isFreeStartFlow) {
1311
- params.pendingId = this.pendingId;
1312
- delete params.businessId;
1313
- }
1314
- util
1315
- .ajax({
1316
- url: this.isFreeStartFlow
1317
- ? freeStartFlowWithSubmitTask
1318
- : this.formType == 'readTransfer'
1319
- ? startReadTransferHandleFlowWithTaskReadEnd
1320
- : this.copyHistory
1321
- ? freeStartFlow
1322
- : register,
1323
- method: 'post',
1324
- data: params
1325
- })
1326
- .then((res) => {
1327
- const { status, message } = res;
1328
- if (this.showBtn) {
1329
- this.loading = false;
1330
- } else {
1331
- this.allLoading.close();
1332
- }
1333
- if (status === 'success' || res.rCode == 0) {
1334
- this.quit(true);
1335
- this.simpleTips && this.$message.success('操作成功');
1336
- } else {
1337
- this.$message.error(message || '系统错误,请联系管理员!');
1338
- }
1339
- })
1340
- .catch((err) => {
1341
- if (this.showBtn) {
1342
- this.loading = false;
1343
- } else {
1344
- this.allLoading.close();
1345
- }
1346
- if (err.message && err.message !== 'canceled') {
1347
- this.$message.error(err.message);
1348
- }
1349
- });
1350
- } else {
1351
- return false;
1352
- }
1353
- });
1354
- },
1355
- getNodeInfos(nodeId, index) {
1356
- let params = {
1357
- processDefinitionId: this.processDefinitionId,
1358
- nextNodeId: nodeId ? nodeId : this.nextNode.nextNode,
1359
- businessId: this.id,
1360
- userId: util.getStorage('userId')
1361
- };
1362
- util
1363
- .ajax({ url: getNodeInfo, params })
1364
- .then((res) => {
1365
- const {
1366
- status,
1367
- message,
1368
- data: {
1369
- nextUserList,
1370
- nodeExtAttr,
1371
- nodeMoreInfo,
1372
- countersignaturetypeText,
1373
- countersignaturetypeCode
1374
- }
1375
- } = res;
1376
- if (this.showBtn) {
1377
- this.loading = false;
1378
- } else {
1379
- this.allLoading.close();
1380
- }
1381
- if (status === 'success') {
1382
- if( this.currentOrgSelectorParams.department && !this.currentOrgSelectorParams.department.roleid && this.selectorParams.roleid && nodeExtAttr.deptRoleCode){
1383
- this.currentOrgSelectorParams.department.roleid = nodeExtAttr.deptRoleCode;
1384
- }
1385
- this.isCurrentNodeForbiddenChangeCandidate =
1386
- nodeExtAttr.isCurrentNodeForbiddenChangeCandidate;
1387
- this.nextNode.userInfo = nextUserList;
1388
- this.countersignaturetypeCode = countersignaturetypeCode;
1389
- this.nextNode.countersignaturetypeText = countersignaturetypeText;
1390
- this.enableCustomLimitTimeSetting =
1391
- nodeExtAttr.enableCustomLimitTimeSetting == 1;
1392
- if (nodeMoreInfo.currentOrgDefaultSelectObjectItems) {
1393
- this.nextCurrentOrgselectUserList = []
1394
- if (
1395
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.deptIds.length >
1396
- 0
1397
- ) {
1398
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.deptIds.map(
1399
- (x, i) => {
1400
- this.nextCurrentOrgselectUserList.push({
1401
- showname:
1402
- nodeMoreInfo.currentOrgDefaultSelectObjectItems
1403
- .deptNames[i],
1404
- showid: x,
1405
- stype: 'department'
1406
- });
1407
- }
1408
- );
1409
- }
1410
- if (
1411
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.userIds.length >
1412
- 0
1413
- ) {
1414
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.userIds.map(
1415
- (x, i) => {
1416
- this.nextCurrentOrgselectUserList.push({
1417
- showname:
1418
- nodeMoreInfo.currentOrgDefaultSelectObjectItems
1419
- .userNames[i],
1420
- showid: x,
1421
- stype: 'employee'
1422
- });
1423
- }
1424
- );
1425
- }
1426
- if (
1427
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.orgIds.length >
1428
- 0
1429
- ) {
1430
- nodeMoreInfo.currentOrgDefaultSelectObjectItems.orgIds.map(
1431
- (x, i) => {
1432
- this.nextCurrentOrgselectUserList.push({
1433
- showname:
1434
- nodeMoreInfo.currentOrgDefaultSelectObjectItems
1435
- .orgNames[i],
1436
- showid: x,
1437
- stype: 'enterprise'
1438
- });
1439
- }
1440
- );
1441
- }
1442
- this.nextNode.nextCurrentOrgObj = nodeMoreInfo.currentOrgDefaultSelectObjects
1443
- }
1444
- if (
1445
- this.enableCustomLimitTimeSetting &&
1446
- nodeMoreInfo.defaultCustomLimitDays
1447
- ) {
1448
- this.nextNode.customLimitTime =
1449
- this.nextNode.customLimitTimeText =
1450
- nodeMoreInfo.defaultCustomLimitDays + '';
1451
- }
1452
- this.isTaskread = nodeExtAttr.isTaskread;
1453
- this.isHandleExplain = nodeExtAttr.isHandleExplain;
1454
- this.isCustomUser = nodeExtAttr.isCustomUser; //是否展示选人组件按钮
1455
- this.presetEdit = nodeExtAttr.presetEdit; //是否展示备选人
1456
- this.isDefSelectedObj = nodeExtAttr.isDefSelectedObj; //是否默认选中
1457
- if (
1458
- nodeExtAttr.userSelectionType == 7 ||
1459
- nodeExtAttr.userSelectionType == 8 ||
1460
- nodeExtAttr.userSelectionType == 9 ||
1461
- nodeExtAttr.userSelectionType == 10 ||
1462
- nodeExtAttr.userSelectionType == 11 ||
1463
- nodeExtAttr.userSelectionType == 12
1464
- ) {
1465
- this.getIsShowNextUser(
1466
- nodeExtAttr && nodeExtAttr.userSelectionType
1467
- );
1468
- } else {
1469
- const { multiple, params } = this.isMultiple(
1470
- nodeExtAttr.userSelectionType
1471
- );
1472
- this.multiple = multiple;
1473
- this.params = params;
1474
- }
1475
- // this.isReadMultiple(nodeExtAttr.userSelectionType);
1476
- if (nodeExtAttr.nodeType === 1 || nodeExtAttr.nodeType === 2) {
1477
- this.isHideCurrentOrg =
1478
- nodeExtAttr.isHideCurrentOrg == 1 ? false : true; //判断是否隐藏本单位
1479
- this.isHideOtherOrg =
1480
- nodeExtAttr.isHideOtherOrg == 1 ? false : true; //判断是否隐藏外单位
1481
- } else {
1482
- this.isHideCurrentOrg = false;
1483
- this.isHideOtherOrg = false;
1484
- }
1485
- nextUserList.map((item) => {
1486
- if (
1487
- this.multiple &&
1488
- nodeExtAttr.isDefSelectedObj == 1 &&
1489
- nextUserList !== undefined
1490
- ) {
1491
- this.nextNode.nextUser.push(item.userId);
1492
- this.selectUserList.push({
1493
- showname: item.username,
1494
- showid: item.userId
1495
- });
1496
- }
1497
-
1498
- this.options.push({
1499
- showname: item.username,
1500
- showid: item.userId
1501
- });
1502
- });
1503
- if (this.multiple) {
1504
- this.nextNode.nextReadUserId = [];
1505
- } else {
1506
- this.nextNode.nextReadUserId = '';
1507
- }
1508
- if (
1509
- nextUserList.length > 0 &&
1510
- nodeExtAttr.isDefSelectedObj == 1 &&
1511
- !this.multiple
1512
- ) {
1513
- this.nextNode.nextUser = nextUserList[0].userId;
1514
- this.selectUserList.push({
1515
- showname: nextUserList[0].username,
1516
- showid: nextUserList[0].userId
1517
- });
1518
- }
1519
- this.radioList = this.options;
1520
- } else {
1521
- this.$message.error(message || '系统错误,请联系管理员!');
1522
- }
1523
- nodeId && this.$refs.selectUser[index].changeInfo();
1524
- })
1525
- .catch((err) => {
1526
- if (this.showBtn) {
1527
- this.loading = false;
1528
- } else {
1529
- this.allLoading.close();
1530
- }
1531
- if (err.message && err.message !== 'canceled') {
1532
- this.$message.error(err.message);
1533
- }
1534
- });
1535
- },
1536
- changeSel(val) {
1537
- this.nextNode.nextUser = [];
1538
- this.options = [];
1539
- this.selectUserList = [];
1540
- this.radioList = [];
1541
- if (this.showBtn) {
1542
- this.loading = true;
1543
- } else {
1544
- this.allLoading = util.loading(this.$loading, '加载中...');
1545
- }
1546
- this.getNodeInfos();
1547
- },
1548
- // 取消
1549
- quit(val) {
1550
- if (val === true) return this.$emit('cancel', val);
1551
- this.$emit('cancel', false);
1552
- },
1553
- getFind() {
1554
- util
1555
- .ajax({
1556
- url: findSysCodes
1557
- })
1558
- .then((res) => {
1559
- const { status, message } = res;
1560
- if (status === 'success') {
1561
- if (this.hideMessage) return;
1562
- this.nextNode.noticeType = message.split(',');
1563
- let arr = [];
1564
- this.nextNode.noticeList.map((item) => {
1565
- this.nextNode.noticeType.map((x) => {
1566
- if (x == item.cciValue) {
1567
- arr.push(x);
1568
- }
1569
- });
1570
- });
1571
- this.nextNode.noticeType = arr;
1572
- } else {
1573
- this.$message.error(message || '系统错误,请联系管理员!');
1574
- }
1575
- })
1576
- .catch((err) => {
1577
- if (this.showBtn) {
1578
- this.loading = false;
1579
- } else {
1580
- this.allLoading.close();
1581
- }
1582
- if (err.message && err.message !== 'canceled') {
1583
- this.$message.error(err.message);
1584
- }
1585
- });
1586
- },
1587
- /**
1588
- * isMultiple
1589
- * @desc:是否多选
1590
- * @author liufan
1591
- * @date 2022年9月13日
1592
- **/
1593
- isMultiple(val, choiceOrgId, choiceDeptId, pOrgId) {
1594
- let multiple = false;
1595
- let params = {};
1596
- if (val == 2 || val == 4 || val == 6 || val == 16 || val == 12) {
1597
- multiple = true;
1598
- }
1599
- if (val == 1 || val == 2 || val == 5) {
1600
- params.filid = this.userModel.orgId;
1601
- params.only_filid = true;
1602
- if (choiceOrgId) {
1603
- params.filid = choiceOrgId;
1604
- }
1605
- }
1606
- if (val == 5 || val == 6) {
1607
- params.filid = this.userModel.orgId;
1608
- params.mydeptid = this.userModel.depId;
1609
- if (choiceDeptId) {
1610
- params.mydeptid = choiceDeptId;
1611
- }
1612
- if (choiceOrgId) {
1613
- params.filid = choiceOrgId;
1614
- }
1615
- }
1616
- if (val == 15 || val == 16) {
1617
- params.filid = this.userModel.orgId;
1618
- if (pOrgId) {
1619
- params.filid = pOrgId;
1620
- }
1621
- }
1622
- return { multiple, params };
1623
- },
1624
- getStartFlow(processId) {
1625
- if (!processId) {
1626
- return false;
1627
- }
1628
- if (this.showBtn) {
1629
- this.loading = true;
1630
- } else {
1631
- this.allLoading = util.loading(this.$loading, '加载中...');
1632
- }
1633
- this.businessId = this.id;
1634
- let params = {
1635
- processDefinitionId: processId, // processId || this.processDefinitionId,
1636
- userId: util.getStorage('userId'),
1637
- businessId: this.businessId
1638
- };
1639
- if (!this.shwowBtn) {
1640
- params.taskAction = 'toStartFlowWithoutTempSave';
1641
- }
1642
- // 获取节点
1643
- util
1644
- .ajax({ url: toStartFlow, params })
1645
- .then((res) => {
1646
- //pc接口返回数据处理
1647
- const { status, message, data } = res;
1648
- if (status == 'success') {
1649
- data.nodeInfoMap.nodeExtAttr.submitTipsMsg &&
1650
- this.$confirm(
1651
- data.nodeInfoMap.nodeExtAttr.submitTipsMsg,
1652
- '提示',
1653
- {
1654
- confirmButtonText: '确定',
1655
- cancelButtonText: '取消',
1656
- type: 'warning'
1657
- }
1658
- )
1659
- .then(() => {})
1660
- .catch(() => {
1661
- this.quit();
1662
- });
1663
- data.nextNodeCheckType &&
1664
- (this.nextNodeCheckType = data.nextNodeCheckType);
1665
- data.nextOperateCheckType &&
1666
- (this.nextOperateCheckType = data.nextOperateCheckType);
1667
- if (data.currentOrgSelectorParams) {
1668
- if (
1669
- data.currentOrgSelectorParams.enableCurrentOrgConfig == 'true'
1670
- ) {
1671
- this.currentOrgSelectorTabs =
1672
- data.currentOrgSelectorParams.currentOrgType.split(',');
1673
- let currentOrgparams =
1674
- data.currentOrgSelectorParams.currentOrgRange.split(',');
1675
- this.currentOrgSelectorTabs.map((x, i) => {
1676
- this.currentOrgSelectorParams[x] = {
1677
- filid:
1678
- currentOrgparams[i] == 'my'
1679
- ? JSON.parse(util.getStorage('mainConfig')).userModel
1680
- .orgId
1681
- : currentOrgparams[i],
1682
- only_filid: true
1683
- };
1684
- });
1685
- }
1686
- }
1687
- this.customPresetHintMessage = data.customPresetHintMessage;
1688
- this.readOnlyNotificationType = data.readOnlyNotificationType;
1689
- this.notificationMessageReadOnly =
1690
- data.notificationMessageReadOnly == 'true';
1691
- this.nextNode.nodeInfo = data.nextNodeList;
1692
- this.nextNode.nextNode = data.nextNodeList[0].nodeId;
1693
- this.isPreset = data.isPreset;
1694
- this.isHideDefaultOperation =
1695
- data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation;
1696
- this.defaultNextNode = data.nodeInfoMap.nodeExtAttr.defaultNextNode;
1697
- this.isChooseNextNode =
1698
- data.nodeInfoMap.nodeExtAttr.isChooseNextNode;
1699
- this.isCdjxjTaskHandle = data.isCdjxjTaskHandle;
1700
- if (this.isChooseNextNode == 1) {
1701
- this.operationList = [
1702
- // { key: 0, value: '默认', list: [] },
1703
- { key: 1, value: '自定义', list: [] }
1704
- ];
1705
- if (data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation != 1) {
1706
- this.operationList.unshift({
1707
- key: 0,
1708
- value: '默认',
1709
- list: data.nextNodeList
1710
- });
1711
- }
1712
- let arr = [];
1713
- for (let key in data.taskNodeMap) {
1714
- arr.push({ nodeName: data.taskNodeMap[key], nodeId: key });
1715
- }
1716
- // this.operationList[0].list = data.nextNodeList;
1717
- this.operationList[
1718
- data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation != 1 ? 1 : 0
1719
- ].list = arr;
1720
- if (this.isHideDefaultOperation != 1) {
1721
- this.nextNode.nextOperate = 0;
1722
- this.nextNode.nodeInfo = this.operationList[0].list;
1723
- if (this.nextNode.nodeInfo.length > 0) {
1724
- let defaultNodeData = data.nextNodeList.filter(
1725
- (x) => x.nodeId == this.defaultNextNode
1726
- );
1727
- this.nextNode.nextNode =
1728
- defaultNodeData.length > 0
1729
- ? this.defaultNextNode
1730
- : data.nextNodeList[0].nodeId;
1731
- }
1732
- }
1733
- if (
1734
- data.nodeInfoMap.nodeExtAttr.defaultNextOperate == 1 ||
1735
- data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation == 1
1736
- ) {
1737
- // this.nextNode.nodeInfo = data.nextNodeList
1738
- this.nextNode.nextOperate = 1;
1739
- this.nextNode.nodeInfo =
1740
- this.operationList[
1741
- this.isHideDefaultOperation != 1 ? 1 : 0
1742
- ].list;
1743
-
1744
- if (this.nextNode.nodeInfo.length > 0) {
1745
- let defaultNodeData = this.nextNode.nodeInfo.filter(
1746
- (x) => x.nodeId == this.defaultNextNode
1747
- );
1748
- this.nextNode.nextNode =
1749
- defaultNodeData.length > 0
1750
- ? this.defaultNextNode
1751
- : this.nextNode.nodeInfo[0].nodeId;
1752
- }
1753
- }
1754
- }
1755
- this.isCustomPreset = data.isCustomPreset;
1756
- this.presetTaskNodeKeyStr = data.presetTaskNodeKeyStr;
1757
- this.presetTaskNodeMap = data.presetTaskNodeMap;
1758
- this.isSinglePage = data.taskExamine.isSinglePage;
1759
- this.isSinglePage &&
1760
- (this.nextNode.opinion = data.taskExamine.opinion);
1761
- // this.nextNode.noticeInfo = data.taskExamine.notificationMsg;
1762
- this.nextNode.nodeName = data.taskExamine.nodeName;
1763
- this.canPresetRead = data.canPresetRead;
1764
- if (data.canPresetRead) {
1765
- let ids =
1766
- data.nodeInfoMap.nodeExtAttr.presetReadCandinateIds.split(',');
1767
- let names =
1768
- data.nodeInfoMap.nodeExtAttr.presetReadCandinateNames.split(
1769
- ','
1770
- );
1771
- ids.map((item, index) => {
1772
- this.presetReadUserId.push({
1773
- showid: item,
1774
- showname: names[index]
1775
- });
1776
- this.selectPresetUserList.push({
1777
- showid: item,
1778
- showname: names[index]
1779
- });
1780
- this.nextNode.presetReadUserId.push(item);
1781
- });
1782
- }
1783
- this.getNodeInfos();
1784
- // this.getPresetFlowInfo();
1785
- this.isCustomPreset &&
1786
- this.$refs.customPreset.getPresetFlowInfo(this.nextNode.nextNode);
1787
- this.getFind();
1788
- this.getMessage();
1789
- } else {
1790
- this.$message.error(message || '系统错误,请联系管理员!');
1791
- }
1792
- })
1793
- .catch((err) => {
1794
- if (this.showBtn) {
1795
- this.loading = false;
1796
- } else {
1797
- this.allLoading.close();
1798
- }
1799
- if (err.message && err.message !== 'canceled') {
1800
- this.$message.error(err.message);
1801
- }
1802
- });
1803
- }
1804
- }
1805
- };
1806
- </script>
1
+ <template>
2
+ <div
3
+ v-loading="loading"
4
+ class="es-flow-form"
5
+ element-loading-text="加载中..."
6
+ element-loading-spinner="el-icon-loading"
7
+ element-loading-background="rgba(255, 255,255, 0.8)"
8
+ >
9
+ <el-form
10
+ ref="nextNode"
11
+ :model="nextNode"
12
+ class="demo-dynamic"
13
+ label-width="100px"
14
+ :rules="rules"
15
+ :label-position="labelPosition"
16
+ >
17
+ <div
18
+ :style="`height:${showBtn ? '430px' : 'auto'}; overflow-y:${
19
+ showBtn ? 'auto' : 'hidden'
20
+ } ; margin-bottom: 10px;overflow-x: hidden;`"
21
+ >
22
+ <el-form-item
23
+ v-show="showBtn"
24
+ prop="nodeName"
25
+ label="当前节点"
26
+ :rules="[
27
+ { required: true, message: `请选择下步节点`, trigger: 'blur' }
28
+ ]"
29
+ >
30
+ <el-input v-model="nextNode.nodeName" disabled />
31
+ </el-form-item>
32
+ <el-form-item
33
+ v-if="isSinglePage || copyHistory || formType == 'readTransfer'"
34
+ prop="newOpinion"
35
+ :label="
36
+ copyHistory || formType == 'readTransfer' ? '填写意见' : '意见'
37
+ "
38
+ >
39
+ <CommonOpinions
40
+ class="opinions"
41
+ :opinion="nextNode.newOpinion"
42
+ :rows="copyHistory || formType == 'readTransfer' ? 2 : 5"
43
+ @change="(val) => (nextNode.newOpinion = val)"
44
+ />
45
+ </el-form-item>
46
+ <el-form-item
47
+ prop="nextOperate"
48
+ label="下步操作"
49
+ v-if="isChooseNextNode == 1"
50
+ :rules="[
51
+ { required: true, message: `请选择下步操作`, trigger: 'blur' }
52
+ ]"
53
+ >
54
+ <el-select
55
+ v-if="nextOperateCheckType == 'select'"
56
+ v-model="nextNode.nextOperate"
57
+ :placeholder="`请选择下步操作`"
58
+ @change="selecNext"
59
+ >
60
+ <el-option
61
+ v-for="items in operationList"
62
+ :key="items.key"
63
+ :label="items.value"
64
+ :value="items.key"
65
+ ></el-option>
66
+ </el-select>
67
+ <es-radio-group
68
+ v-else-if="nextOperateCheckType == 'radio'"
69
+ v-model="nextNode.nextOperate"
70
+ :data="operationList"
71
+ @change="selecNext($event, true)"
72
+ value-key="key"
73
+ label-key="value"
74
+ ></es-radio-group>
75
+ </el-form-item>
76
+ <el-form-item
77
+ prop="nextNode"
78
+ label="下步节点"
79
+ :rules="[
80
+ { required: false, message: `请选择下步节点`, trigger: 'blur' }
81
+ ]"
82
+ >
83
+ <el-select
84
+ v-if="nextNodeCheckType == 'select'"
85
+ v-model="nextNode.nextNode"
86
+ :placeholder="`请选择下步节点`"
87
+ @change="changeSel"
88
+ >
89
+ <el-option
90
+ v-for="items in nextNode.nodeInfo"
91
+ :key="items.id"
92
+ :label="items.nodeName"
93
+ :value="items.nodeId"
94
+ ></el-option>
95
+ </el-select>
96
+ <es-radio-group
97
+ v-else-if="nextNodeCheckType == 'radio'"
98
+ v-model="nextNode.nextNode"
99
+ :data="nextNode.nodeInfo"
100
+ @change="changeSel"
101
+ value-key="nodeId"
102
+ label-key="nodeName"
103
+ ></es-radio-group>
104
+ </el-form-item>
105
+ <el-form-item
106
+ v-if="countersignaturetypeCode != 0"
107
+ prop="countersignaturetypeText"
108
+ label="处理方式"
109
+ >
110
+ <el-input
111
+ v-model="nextNode.countersignaturetypeText"
112
+ placeholder="请输入内容"
113
+ disabled
114
+ />
115
+ </el-form-item>
116
+ <!-- <el-form-item
117
+ prop="nextNode"
118
+ label="下步办理人"
119
+ v-if="isShowNextUser"
120
+ :rules="[
121
+ { required: true, message: `请选择下步办理人`, trigger: 'blur' }
122
+ ]"
123
+ >
124
+ <SelectUser
125
+ :nextUser="nextNode.nextUser"
126
+ :radioList="radioList"
127
+ :multiple="multiple"
128
+ :showTooltip="showTooltip"
129
+ :isCustomUser="isCustomUser"
130
+ :options="options"
131
+ :presetEdit="presetEdit"
132
+ :isDefSelectedObj="isDefSelectedObj"
133
+ :selectUserList="selectUserList"
134
+ @change="changeSelectUser"
135
+ :types="nextUserTypes"
136
+ :params="params"
137
+ />
138
+ </el-form-item> -->
139
+ <el-form-item
140
+ v-if="isHideCurrentOrg"
141
+ prop="nextCurrentOrgObj"
142
+ label="本单位"
143
+ >
144
+ <SelectUser
145
+ :nextUser="nextCurrentOrgObjSelect"
146
+ multiple
147
+ mix
148
+ @change="disposeAppUnit($event, 'nextCurrentOrgObjSelect')"
149
+ :showTooltip="showTooltip"
150
+ :selectUserList="nextCurrentOrgselectUserList"
151
+ :types="currentOrgSelectorTabs"
152
+ :params="currentOrgSelectorParams"
153
+ />
154
+ </el-form-item>
155
+ <el-form-item v-if="isHideOtherOrg" label="外单位">
156
+ <SelectUser
157
+ :nextUser="nextOtherOrgObjSelect"
158
+ multiple
159
+ :showTooltip="showTooltip"
160
+ mix
161
+ :where="{ filid: 'other' }"
162
+ @change="disposeAppUnit($event, 'nextOtherOrgObjSelect')"
163
+ :types="['enterprise', 'filgroup']"
164
+ :params="foreignOrgSelectorParams"
165
+ />
166
+ </el-form-item>
167
+ <el-form-item
168
+ v-if="!isHideOtherOrg && !isHideCurrentOrg"
169
+ :prop="isShowNextUser ? 'nextUser' : 'nextOrgId'"
170
+ :label="
171
+ isShowNextUser
172
+ ? `${flowLabelConfig.nextUser || '下步办理人'}`
173
+ : '办理对象'
174
+ "
175
+ >
176
+ <SelectUser
177
+ :nextUser="isShowNextUser ? nextNode.nextUser : nextNode.nextOrgId"
178
+ :radioList="radioList"
179
+ :multiple="multiple"
180
+ :isCustomUser="!isShowNextUser ? 1 : isCustomUser"
181
+ :showTooltip="showTooltip"
182
+ :isCurrentNodeForbiddenChangeCandidate="
183
+ isCurrentNodeForbiddenChangeCandidate
184
+ "
185
+ :options="options"
186
+ :presetEdit="presetEdit"
187
+ :mix="multiple"
188
+ :isDefSelectedObj="isDefSelectedObj"
189
+ :selectUserList="selectUserList"
190
+ @change="
191
+ changeSelectUser(
192
+ $event,
193
+ isShowNextUser ? 'nextUser' : 'nextOrgId'
194
+ )
195
+ "
196
+ :types="
197
+ !isShowNextUser
198
+ ? nextUserTypes
199
+ : isCdjxjTaskHandle != 'true'
200
+ ? ['employee', 'persongroup']
201
+ : ['employee']
202
+ "
203
+ :params="isShowNextUser ? params : {}"
204
+ :tabs="nextUserTabs"
205
+ />
206
+ </el-form-item>
207
+ <el-form-item
208
+ prop="nextReadUserId"
209
+ v-if="isTaskread == 1"
210
+ label="
211
+ 分阅用户
212
+ "
213
+ >
214
+ <SelectUser
215
+ :nextUser="nextNode.nextReadUserId"
216
+ :multiple="true"
217
+ :selectUserList="selectReadUserList"
218
+ :showTooltip="showTooltip"
219
+ :options="userOptions"
220
+ title="分阅用户"
221
+ :mix="true"
222
+ :types="types"
223
+ @change="changeSelectReadUser($event, 'nextReadUserId')"
224
+ :tabs="tabs"
225
+ />
226
+ </el-form-item>
227
+ <el-form-item
228
+ prop="presetReadUserId"
229
+ v-if="canPresetRead"
230
+ label="
231
+ 自动分阅
232
+ "
233
+ >
234
+ <SelectUser
235
+ :nextUser="nextNode.presetReadUserId"
236
+ :multiple="true"
237
+ :selectUserList="selectPresetUserList"
238
+ :showTooltip="showTooltip"
239
+ :options="presetOptions"
240
+ title="分阅用户"
241
+ :radioList="presetReadUserId"
242
+ :presetEdit="1"
243
+ :mix="true"
244
+ :types="types"
245
+ @change="changeSelectReadUser($event, 'presetReadUserId')"
246
+ :tabs="tabs"
247
+ />
248
+ </el-form-item>
249
+ <el-form-item
250
+ v-if="enableCustomLimitTimeSetting"
251
+ prop="customLimitTime"
252
+ label="限时办理"
253
+ :rules="[
254
+ {
255
+ required: enableCustomLimitTimeSetting,
256
+ message: showCustomLimitTimeText
257
+ ? '请输入限时办理天数'
258
+ : '请选择限时办理天数',
259
+ trigger: 'blur'
260
+ },
261
+ {
262
+ required: enableCustomLimitTimeSetting,
263
+ validator: checkCustomLimitTime,
264
+ trigger: 'blur'
265
+ }
266
+ ]"
267
+ >
268
+ <div style="display: flex">
269
+ <es-select
270
+ v-model="nextNode.customLimitTimeText"
271
+ placeholder="请选择"
272
+ @change="handleChangeTime"
273
+ :style="`flex:${showBtn ? 'unset' : '1'};width: ${
274
+ showBtn ? '20%' : 'unset'
275
+ } !important; display: inline-block;`"
276
+ sysCode="bpm_custom_limit_time"
277
+ ></es-select>
278
+ <el-input
279
+ v-model="nextNode.customLimitTime"
280
+ :style="`flex:${showBtn ? 'unset' : '1'};width: ${
281
+ showBtn ? '20%' : 'unset'
282
+ } !important; display: inline-block;`"
283
+ placeholder="请输入限时办理的天数"
284
+ class="input-with-select custom-limit-time"
285
+ @change="changeCustomLimitTime"
286
+ >
287
+ </el-input>
288
+ <span style="margin-left: 5px">天</span>
289
+ </div>
290
+ </el-form-item>
291
+ <el-form-item
292
+ v-if="isHandleExplain == 1"
293
+ prop="handleExplain"
294
+ label="办理说明"
295
+ >
296
+ <el-input
297
+ placeholder="请输入办理说明"
298
+ v-model="nextNode.handleExplain"
299
+ />
300
+ </el-form-item>
301
+ <el-form-item
302
+ prop="noticeType"
303
+ label="通知方式"
304
+ v-show="showBtn && nextNode.noticeList.length > 0 && !hideMessage"
305
+ >
306
+ <el-checkbox-group v-model="nextNode.noticeType">
307
+ <el-checkbox
308
+ v-for="item of nextNode.noticeList"
309
+ :key="item.cciValue"
310
+ :label="item.cciValue"
311
+ :disabled="
312
+ readOnlyNotificationType
313
+ ? readOnlyNotificationType.indexOf(item.cciValue) != -1
314
+ : false
315
+ "
316
+ >
317
+ {{ item.shortName }}
318
+ </el-checkbox>
319
+ </el-checkbox-group>
320
+ </el-form-item>
321
+ <el-form-item
322
+ v-show="nextNode.noticeType.length != 0 && showBtn"
323
+ prop="nextNode"
324
+ label="通知消息"
325
+ >
326
+ <es-input
327
+ style="
328
+ border-color: #ccc;
329
+ padding: 5px;
330
+ border-radius: 5px;
331
+ font-size: 13px;
332
+ "
333
+ type="textarea"
334
+ v-model="nextNode.noticeInfo"
335
+ :readonly="notificationMessageReadOnly"
336
+ />
337
+ </el-form-item>
338
+ <CustomPreset
339
+ v-show="isCustomPreset"
340
+ ref="customPreset"
341
+ @changeCustom="
342
+ (data) => {
343
+ presetList = data;
344
+ }
345
+ "
346
+ :customPresetHintMessage="customPresetHintMessage"
347
+ @changeActiveNames="(val) => (activeNames = val)"
348
+ @loadingEnd="loading = false"
349
+ @loadingStart="loading = true"
350
+ :nextNode="nextNode.nextNode"
351
+ :id="id"
352
+ :processDefinitionId="processDefinitionId"
353
+ />
354
+ <Preset
355
+ v-show="isPreset"
356
+ @changePreset="
357
+ (data) => {
358
+ presetUserJson = data;
359
+ }
360
+ "
361
+ @loadingEnd="loading = false"
362
+ @loadingStart="loading = true"
363
+ :customPresetHintMessage="customPresetHintMessage"
364
+ :nodeId="nextNode.nextNode"
365
+ :businessId="id"
366
+ :processDefinitionId="processDefinitionId"
367
+ :presetTaskNodeMap="presetTaskNodeMap"
368
+ :presetTaskNodeKeyStr="presetTaskNodeKeyStr"
369
+ />
370
+ </div>
371
+ <el-form-item style="margin-bottom: 0px" v-show="showBtn">
372
+ <div style="text-align: right">
373
+ <el-button type="primary" @click="subProcess('nextNode')">
374
+ 确认
375
+ </el-button>
376
+ <el-button @click="quit"> 取消 </el-button>
377
+ </div>
378
+ </el-form-item>
379
+ </el-form>
380
+ <div
381
+ v-if="!showBtn && nextNode.noticeList.length > 0 && !hideMessage"
382
+ style="padding: 5px; background: #fff"
383
+ >
384
+ <div class="news" @click="showNews = !showNews">
385
+ <span class="news-item">消息通知</span>
386
+ <span :class="showNews ? 'show' : 'sj'"></span>
387
+ </div>
388
+ <div v-if="showNews" ref="messagebox" style="transition: 1s">
389
+ <el-checkbox-group v-model="nextNode.noticeType">
390
+ <el-checkbox
391
+ v-for="item of nextNode.noticeList"
392
+ :key="item.cciValue"
393
+ :label="item.cciValue"
394
+ :disabled="
395
+ readOnlyNotificationType
396
+ ? readOnlyNotificationType.indexOf(item.cciValue) != -1
397
+ : false
398
+ "
399
+ >
400
+ {{ item.shortName }}
401
+ </el-checkbox>
402
+ </el-checkbox-group>
403
+ <es-input
404
+ style="
405
+ border-color: #ccc;
406
+ padding: 5px;
407
+ border-radius: 5px;
408
+ font-size: 13px;
409
+ "
410
+ autosize
411
+ v-show="showNews"
412
+ type="textarea"
413
+ v-model="nextNode.noticeInfo"
414
+ @change="handleChange"
415
+ :readonly="notificationMessageReadOnly"
416
+ />
417
+ </div>
418
+ </div>
419
+ </div>
420
+ </template>
421
+
422
+ <script>
423
+ import {
424
+ toStartFlow,
425
+ getNodeInfo,
426
+ findSysCodes,
427
+ getNotificationMsg,
428
+ findCodeValues,
429
+ loginUserInfo,
430
+ register,
431
+ freeStartFlow,
432
+ freeStartFlowWithSubmitTask,
433
+ startReadTransferHandleFlowWithTaskReadEnd
434
+ } from 'eoss-ui/src/config/api';
435
+ import util from 'eoss-ui/src/utils/util';
436
+ import SelectUser from './selectUser.vue';
437
+ import CommonOpinions from './component/CommonOpinions.vue';
438
+ import CustomPreset from './component/CustomPreset.vue';
439
+ import Preset from './component/Preset.vue';
440
+ export default {
441
+ name: 'ProcessForm',
442
+
443
+ components: {
444
+ [Option.name]: Option,
445
+ [SelectUser.name]: SelectUser,
446
+ [CustomPreset.name]: CustomPreset,
447
+ [CommonOpinions.name]: CommonOpinions,
448
+ Preset
449
+ },
450
+ props: {
451
+ processDefinitionId: {
452
+ type: String,
453
+ default: ''
454
+ },
455
+ showTooltip: { type: Boolean, default: true },
456
+ copyHistory: {
457
+ type: String,
458
+ default: ''
459
+ },
460
+ simpleTips: {
461
+ type: Boolean,
462
+ default: true
463
+ },
464
+ formType: {
465
+ type: String,
466
+ default: 'freeStart'
467
+ },
468
+ id: {
469
+ type: String,
470
+ default: ''
471
+ },
472
+ pendingId: {
473
+ type: String,
474
+ default: ''
475
+ },
476
+ opinion: {
477
+ type: String,
478
+ default: ''
479
+ },
480
+ isCancelSecondConfirmationType: {
481
+ type: Boolean,
482
+ default: false
483
+ },
484
+ isFreeStartFlow: {
485
+ type: Boolean,
486
+ default: false
487
+ },
488
+ taskParams: {
489
+ type: Object,
490
+ default: () => {}
491
+ },
492
+ taskExamineParam: {
493
+ type: String,
494
+ default: ''
495
+ },
496
+ labelPosition: {
497
+ type: String,
498
+ default: 'right'
499
+ },
500
+ formTitle: {
501
+ type: String,
502
+ default: ''
503
+ },
504
+ showBtn: { type: Boolean, default: true },
505
+ messageType: {
506
+ type: Array,
507
+ default: () => []
508
+ },
509
+ urgencyLevel: {
510
+ type: [Number, String],
511
+ default: ''
512
+ },
513
+ keyCount: {
514
+ type: [Number, String],
515
+ default: 0
516
+ },
517
+ selectorParams: { type: Object, default: () => {} },
518
+ flowLabelConfig: {
519
+ type: Object,
520
+ default: () => {
521
+ return {};
522
+ }
523
+ },
524
+ hideMessage: { type: Boolean, default: false }
525
+ },
526
+ data() {
527
+ return {
528
+ loading: false,
529
+ isCustomUser: 0,
530
+ isCurrentNodeForbiddenChangeCandidate: 0,
531
+ allLoading: null,
532
+ selectUser: false,
533
+ multiple: false,
534
+ readMultiple: true,
535
+ currentOrgSelectorTabs: ['employee', 'persongroup'],
536
+ customPresetHintMessage: '', //流程预设标题
537
+ nextNodeCheckType: 'select',
538
+ nextOperateCheckType: 'select',
539
+ showNews: false, // 是否展示通知信息
540
+ notificationMessageReadOnly: false,
541
+ isChangeMessage: false,
542
+ readOnlyNotificationType: '',
543
+ show: true,
544
+ enableCustomLimitTimeSetting: false,
545
+ radioList: [],
546
+ nextCurrentOrgselectUserList: [],
547
+ showCustomLimitTimeText: false,
548
+ activeNames: '',
549
+ selectUserList: [],
550
+ defaultNextNode: '',
551
+ presetUserJson: [],
552
+ businessId: '',
553
+ isTaskread: 0, //是否显示分阅用户
554
+ isHandleExplain: 0, //是否展示办理说明
555
+ options: [],
556
+ presetList: [],
557
+ presetReadUserId: [], //自动分阅
558
+ canPresetRead: false, //是否展示自动分阅
559
+ nextUserTypes: ['employee', 'persongroup'],
560
+ isCustomPreset: false, //是否展示预设节点
561
+ isPreset: false, //是否展示预设办理人
562
+ isSinglePage: false,
563
+ presetEdit: 0,
564
+ isDefSelectedObj: 0,
565
+ isChooseNextNode: 0,
566
+ isHideDefaultOperation: 0,
567
+ countersignaturetypeCode: 0,
568
+ presetTaskNodeKeyStr: '', //预设办理人顺序
569
+ presetTaskNodeMap: {}, //预设办理人
570
+ params: {
571
+ filid: 'all', //选择范围(my:本单位/ "" or all:全部)
572
+ selectmix: 'true1',
573
+ deptid: '' //指定部门(my:本部门)
574
+ },
575
+ newOpinion: '',
576
+ operationList: [],
577
+ tabs: {
578
+ employee: {
579
+ param: {
580
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
581
+ name: '本单位用户'
582
+ }
583
+ },
584
+ department: {
585
+ param: {
586
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
587
+ }
588
+ }
589
+ },
590
+ userModel: {},
591
+ nextUserTabs: {},
592
+ selectPresetUserList: [],
593
+ presetOptions: [],
594
+ selectReadUserList: [],
595
+ userOptions: [],
596
+ mixReadList: [],
597
+ mixPresetList: [],
598
+ isCdjxjTaskHandle: '',
599
+ isShowNextUser: true,
600
+ oldMessage: '',
601
+ mixOrgIdList: [], //办理对象混选
602
+ subProcessColumns: [],
603
+ nextOtherOrgObjSelect: [],
604
+ nextCurrentOrgObjSelect: [],
605
+ isHideCurrentOrg: false,
606
+ isHideOtherOrg: false,
607
+ currentOrgSelectorParams: {
608
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
609
+ only_filid: true
610
+ },
611
+ foreignOrgSelectorParams: { filid: 'all', nofilid: 1 },
612
+ nextNode: {
613
+ nodeName: '',
614
+ customLimitTime: '',
615
+ customLimitTimeText: '',
616
+ newOpinion: '',
617
+ countersignaturetypeText: '',
618
+ nextNode: '',
619
+ nextReadUserId: [],
620
+ nextOrgId: [],
621
+ noticeType: [],
622
+ nextOperate: '',
623
+ nextUser: [],
624
+ presetReadUserId: [], //自动分阅
625
+ noticeInfo: '',
626
+ nodeInfo: [],
627
+ userInfo: [],
628
+ handleExplain: '',
629
+ noticeList: [],
630
+ msgTypeCount: 0
631
+ }
632
+ };
633
+ },
634
+ watch: {
635
+ messageType: {
636
+ handler(val) {
637
+ if (this.urgencyLevel) {
638
+ this.nextNode.noticeList = val;
639
+ let arr = [];
640
+ this.nextNode.noticeList.map((item) => {
641
+ this.nextNode.noticeType.map((x) => {
642
+ if (x == item.cciValue) {
643
+ arr.push(x);
644
+ }
645
+ });
646
+ });
647
+ this.nextNode.noticeType = arr;
648
+ } else {
649
+ this.msgTypeCount++;
650
+ }
651
+ }
652
+ },
653
+ processDefinitionId(val) {
654
+ Object.assign(this.$data, this.$options.data());
655
+ this.getUserInfo();
656
+ this.getNodeType();
657
+ this.getStartFlow(val);
658
+ if (this.copyHistory) {
659
+ this.nextNode.newOpinion = this.opinion;
660
+ } else if (this.formType != 'readTransfer') {
661
+ this.newOpinion = this.opinion;
662
+ }
663
+ // this.getStartFlow(val);
664
+ },
665
+ opinion(val) {
666
+ this.newOpinion = this.opinion;
667
+ },
668
+ formTitle: {
669
+ handler(val) {
670
+ if (!this.showBtn && !this.isChangeMessage) {
671
+ this.nextNode.noticeInfo = this.oldMessage.replace('{title}', val);
672
+ }
673
+ },
674
+ deep: true,
675
+ immediate: true
676
+ }
677
+ },
678
+ computed: {
679
+ rules() {
680
+ return {
681
+ customLimitTime: [
682
+ {
683
+ required: this.enableCustomLimitTimeSetting,
684
+ message: this.showCustomLimitTimeText
685
+ ? '请输入限时办理天数'
686
+ : '请选择限时办理天数',
687
+ trigger: 'blur'
688
+ },
689
+ {
690
+ required: this.enableCustomLimitTimeSetting,
691
+ validator: this.checkCustomLimitTime,
692
+ trigger: 'blur'
693
+ }
694
+ ]
695
+ };
696
+ },
697
+ types() {
698
+ if (this.isCdjxjTaskHandle == 'true') {
699
+ return ['employee', 'enterprise', 'department'];
700
+ } else {
701
+ return ['employee', 'enterprise', 'department', 'persongroup'];
702
+ }
703
+ }
704
+ },
705
+ created() {
706
+ this.getUserInfo();
707
+ },
708
+ mounted() {
709
+ if (!this.urgencyLevel) {
710
+ this.getNodeType();
711
+ }
712
+ this.getStartFlow(this.processDefinitionId);
713
+ if (this.copyHistory) {
714
+ this.nextNode.newOpinion = this.opinion;
715
+ } else if (this.formType != 'readTransfer') {
716
+ this.newOpinion = this.opinion;
717
+ }
718
+ },
719
+ methods: {
720
+ handleChangeTime(val) {
721
+ this.nextNode.customLimitTime = val;
722
+ },
723
+ limitTimevalidate() {
724
+ let validSate = true;
725
+ this.$refs.nextNode.validate((valid) => {
726
+ if (valid) {
727
+ validSate = true;
728
+ } else {
729
+ validSate = false;
730
+ }
731
+ });
732
+ return validSate;
733
+ },
734
+ checkCustomLimitTime(rule, value, callback) {
735
+ if (!Number(value) || value.indexOf('.') != -1 || Number(value) < 0) {
736
+ callback(new Error('请输入正确的天数'));
737
+ this.nextNode.customLimitTime = '';
738
+ } else {
739
+ callback();
740
+ }
741
+ },
742
+ handleChange() {
743
+ this.isChangeMessage = true;
744
+ },
745
+ changeCustomLimitTime(val) {
746
+ if (!Number(val) || val.indexOf('.') != -1 || Number(val) < 0) {
747
+ this.$message.warning('请输入正确的天数');
748
+ this.nextNode.customLimitTime = '';
749
+ }
750
+ },
751
+ getUserInfo() {
752
+ let mainConfig = util.getStorage('mainConfig');
753
+ if (mainConfig) {
754
+ this.userModel = JSON.parse(mainConfig).userModel;
755
+ this.foreignOrgSelectorParams.nofilid = this.userModel.orgId;
756
+ this.foreignOrgSelectorParams.roleid =
757
+ this.currentOrgSelectorParams.roleid = this.selectorParams.roleid;
758
+ } else {
759
+ util
760
+ .ajax({ url: loginUserInfo })
761
+ .then((res) => {
762
+ const { status, data } = res;
763
+ if (status == 'success') {
764
+ this.userModel = data;
765
+ this.foreignOrgSelectorParams.nofilid = this.userModel.orgId;
766
+ this.foreignOrgSelectorParams.roleid =
767
+ tthis.currentOrgSelectorParams.roleid =
768
+ this.selectorParams.roleid;
769
+ } else {
770
+ let msg = res.msg || '系统错误,请联系管理员!';
771
+ this.$message.error(msg);
772
+ }
773
+ })
774
+ .catch((err) => {
775
+ if (err.message && err.message !== 'canceled') {
776
+ this.$message.error(err.message);
777
+ }
778
+ });
779
+ }
780
+ },
781
+ getIsShowNextUser(val) {
782
+ if (
783
+ val == 7 ||
784
+ val == 8 ||
785
+ val == 9 ||
786
+ val == 10 ||
787
+ val == 11 ||
788
+ val == 12
789
+ ) {
790
+ this.isShowNextUser = false;
791
+ //设置办理角色
792
+ // $("#orgRoleCode").val(handleRoleId);
793
+ if (val == 7 || val == 8) {
794
+ this.nextUserTypes = ['department'];
795
+ this.nextUserTabs = {
796
+ department: {
797
+ param: {
798
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
799
+ }
800
+ }
801
+ };
802
+ this.multiple = true;
803
+ } else if (val == 9 || val == 10) {
804
+ this.nextUserTypes = ['enterprise'];
805
+ this.nextUserTabs = { enterprise: { param: { filid: 'other' } } };
806
+ this.multiple = true;
807
+ } else if (val == 11 || val == 12) {
808
+ this.nextUserTypes = ['department', 'enterprise'];
809
+ this.nextUserTabs = {
810
+ enterprise: { param: { filid: 'other' } },
811
+ department: {
812
+ param: {
813
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
814
+ }
815
+ }
816
+ };
817
+ this.multiple = true;
818
+ }
819
+ }
820
+ if (val == 7 || val == 9 || val == 11) {
821
+ this.multiple = false;
822
+ }
823
+ },
824
+ // 分阅是否多选
825
+ isReadMultiple(nextReadUserSelectType) {
826
+ if (nextReadUserSelectType == 1) {
827
+ this.readMultiple = false;
828
+ } else if (nextReadUserSelectType == 2) {
829
+ this.readMultiple = true;
830
+ } else if (nextReadUserSelectType == 3) {
831
+ this.readMultiple = false;
832
+ } else if (nextReadUserSelectType == 4) {
833
+ this.readMultiple = true;
834
+ } else if (nextReadUserSelectType == 5) {
835
+ this.readMultiple = false;
836
+ } else if (nextReadUserSelectType == 6) {
837
+ this.readMultiple = true;
838
+ }
839
+ },
840
+ changeSelectReadUser(val, type) {
841
+ const { nextUser, mixList } = val;
842
+ this.nextNode[type] = nextUser;
843
+ if (type === 'presetReadUserId') {
844
+ this.mixPresetList = mixList;
845
+ } else {
846
+ this.mixReadList = mixList;
847
+ }
848
+ },
849
+ selecNext(val) {
850
+ this.nextNode.nextUser = [];
851
+ this.options = [];
852
+ this.selectUserList = [];
853
+ this.radioList = [];
854
+ if (this.showBtn) {
855
+ this.loading = true;
856
+ } else {
857
+ this.allLoading = util.loading(this.$loading, '加载中...');
858
+ }
859
+ this.nextNode.nodeInfo = this.operationList[val].list;
860
+ if (this.nextNode.nodeInfo.length > 0) {
861
+ let defaultNodeData = this.nextNode.nodeInfo.filter(
862
+ (x) => x.nodeId == this.defaultNextNode
863
+ );
864
+ length;
865
+ this.nextNode.nextNode =
866
+ defaultNodeData.length > 0
867
+ ? this.defaultNextNode
868
+ : this.nextNode.nodeInfo[0].nodeId;
869
+ }
870
+ this.getNodeInfos();
871
+ },
872
+ changeSelectUser(val, type) {
873
+ const { nextUser, options, mixList } = val;
874
+ this.nextNode[type] = nextUser;
875
+ this.mixOrgIdList = mixList;
876
+ },
877
+ getsubProcessColumns() {
878
+ let data = [];
879
+ let obj = { name: '[部门员工]-' };
880
+ if (this.nextCurrentOrgObjSelect.length > 0) {
881
+ this.nextCurrentOrgObjSelect.map((x) => {
882
+ if (x.stype == 'employee') {
883
+ obj.name = !obj.value
884
+ ? obj.name + x.showname
885
+ : obj.name + ',' + x.showname;
886
+ obj.value = obj.value
887
+ ? obj.value + ',' + x.showid
888
+ : 'employee-' + x.showid;
889
+ } else {
890
+ data.push({
891
+ name: '[部门]' + x.showname,
892
+ value: 'department-' + x.showid
893
+ });
894
+ }
895
+ });
896
+ }
897
+ obj.value && data.push(obj);
898
+ if (this.nextOtherOrgObjSelect.length > 0) {
899
+ this.nextOtherOrgObjSelect.map((x) => {
900
+ data.push({
901
+ name: '[企业]' + x.showname,
902
+ value: 'enterprise-' + x.showid
903
+ });
904
+ });
905
+ }
906
+ this.subProcessColumns = data;
907
+ // return data;
908
+ },
909
+ // 单位选择完回调
910
+ disposeAppUnit(res, type) {
911
+ let label = type.substring(0, type.lastIndexOf('Select'));
912
+ this.nextNode[label + 'Name'] = '';
913
+ res.options && (this[type] = res.options);
914
+ let obj = {};
915
+ // if (typeof res.mixList == 'array')
916
+ res.mixList && (this.nextNode[label] = res.mixList.join('|'));
917
+ res.options.map((item) => {
918
+ if (obj[item.stype]) {
919
+ obj[item.stype].push(item.showname);
920
+ } else {
921
+ obj[item.stype] = [item.showname];
922
+ }
923
+ });
924
+ for (let key in obj) {
925
+ if (
926
+ key === 'enterprise' &&
927
+ this.nextNode[label + 'Name'].indexOf('[企业]') == -1
928
+ ) {
929
+ this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
930
+ ? this.nextNode[label + 'Name'] +
931
+ '|' +
932
+ '[企业]-' +
933
+ obj[key].join(',')
934
+ : '' + '[企业]-' + obj[key].join(',');
935
+ }
936
+ if (
937
+ key === 'department' &&
938
+ this.nextNode[label + 'Name'].indexOf('[部门]') == -1
939
+ ) {
940
+ this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
941
+ ? this.nextNode[label + 'Name'] +
942
+ '|' +
943
+ '[部门]-' +
944
+ obj[key].join(',')
945
+ : '' + '[部门]-' + obj[key].join(',');
946
+ }
947
+ if (
948
+ key === 'employee' &&
949
+ this.nextNode[label + 'Name'].indexOf('[部门员工]') == -1
950
+ ) {
951
+ this.nextNode[label + 'Name'] = this.nextNode[label + 'Name']
952
+ ? this.nextNode[label + 'Name'] +
953
+ '|' +
954
+ '[部门员工]-' +
955
+ obj[key].join(',')
956
+ : '' + '[部门员工]-' + obj[key].join(',');
957
+ }
958
+ }
959
+ // this.nextNode[label + 'Name'] = obj.enterprise?;
960
+ if (!this.currentNodeIsCircularReadNode) {
961
+ this.nextNode[label + 'SerialId'] = res.nextUser.join(',');
962
+ this.nextNode[label + 'Json'] = JSON.stringify(res.options);
963
+ }
964
+ this.getsubProcessColumns();
965
+ },
966
+ getNodeType() {
967
+ util
968
+ .ajax({
969
+ url: findCodeValues,
970
+ params: {
971
+ ccCode: 'notification_type',
972
+ userId: util.getStorage('userId')
973
+ }
974
+ })
975
+ .then((res) => {
976
+ const { status, data } = res;
977
+ if (status === 'success') {
978
+ this.nextNode.noticeList = data;
979
+ }
980
+ })
981
+ .catch((err) => {
982
+ if (this.showBtn) {
983
+ this.loading = false;
984
+ } else {
985
+ this.allLoading.close();
986
+ }
987
+ if (err.message && err.message !== 'canceled') {
988
+ this.$message.error(err.message);
989
+ }
990
+ });
991
+ },
992
+ //获取通知信息
993
+ getMessage() {
994
+ let params = {
995
+ processDefinitionId: this.processDefinitionId,
996
+ nodeId: this.nextNode.nextNode,
997
+ businessId: this.id
998
+ };
999
+ if (!this.showBtn) {
1000
+ params.openMode = 'samepage';
1001
+ }
1002
+ util
1003
+ .ajax({ url: getNotificationMsg, params, methods: 'post' })
1004
+ .then((res) => {
1005
+ if (res.status === 'success') {
1006
+ if (!this.showBtn) {
1007
+ this.oldMessage = res.message;
1008
+ this.nextNode.noticeInfo = res.message.replace(
1009
+ '{title}',
1010
+ this.formTitle
1011
+ );
1012
+ } else {
1013
+ this.nextNode.noticeInfo = res.message;
1014
+ }
1015
+ }
1016
+ })
1017
+ .catch((err) => {
1018
+ if (this.showBtn) {
1019
+ this.loading = false;
1020
+ } else {
1021
+ this.allLoading.close();
1022
+ }
1023
+ if (err.message && err.message !== 'canceled') {
1024
+ this.$message.error(err.message);
1025
+ }
1026
+ });
1027
+ },
1028
+ // 提交表单
1029
+ subProcess(formName) {
1030
+ this.saveProcess(formName);
1031
+ },
1032
+ saveProcess(formName) {
1033
+ this.$refs[formName].validate((valid) => {
1034
+ if (valid) {
1035
+ const {
1036
+ nextNode,
1037
+ nextUser,
1038
+ noticeInfo,
1039
+ noticeType,
1040
+ handleExplain,
1041
+ presetReadUserId,
1042
+ nextReadUserId,
1043
+ nextOrgId,
1044
+ newOpinion,
1045
+ customLimitTime,
1046
+ nextOtherOrgObj,
1047
+ nextCurrentOrgObj
1048
+ } = this.nextNode;
1049
+ // if (noticeType.length === 0) {
1050
+ // return this.$message.warning('请选择通知方式');
1051
+ // }
1052
+ if (this.isShowNextUser) {
1053
+ if (
1054
+ (nextUser == '' || (this.multiple && nextUser.length == 0)) &&
1055
+ !this.isHideCurrentOrg &&
1056
+ !this.isHideOtherOrg
1057
+ ) {
1058
+ return this.$message.warning(
1059
+ `请选择${this.flowLabelConfig.nextUser || '下步办理人'}`
1060
+ );
1061
+ }
1062
+ } else {
1063
+ if (nextOrgId == '' || (this.multiple && nextOrgId.length == 0)) {
1064
+ return this.$message.warning('请选择办理对象');
1065
+ }
1066
+ }
1067
+ if (
1068
+ (this.isHideOtherOrg || this.isHideCurrentOrg) &&
1069
+ !nextCurrentOrgObj &&
1070
+ !nextOtherOrgObj
1071
+ ) {
1072
+ return this.$message.warning('请选择办理对象');
1073
+ }
1074
+ if (this.isCancelSecondConfirmationType) {
1075
+ this.$confirm('确认提交吗?', '提示', {
1076
+ confirmButtonText: '确定',
1077
+ cancelButtonText: '取消',
1078
+ type: 'warning'
1079
+ }).then(() => {
1080
+ if (this.showBtn) {
1081
+ this.loading = true;
1082
+ } else {
1083
+ this.allLoading = util.loading(this.$loading, '加载中...');
1084
+ }
1085
+ let newNextUser = [];
1086
+ if (this.multiple) {
1087
+ nextUser && nextUser.map((item) => newNextUser.push(item));
1088
+ }
1089
+ let newNoticeType = '';
1090
+ if (noticeType) {
1091
+ newNoticeType = noticeType.join(',');
1092
+ }
1093
+ let params = {
1094
+ processDefinitionId: this.processDefinitionId,
1095
+ nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
1096
+ nextNodeId: nextNode,
1097
+ businessId: this.businessId,
1098
+ notificationType: newNoticeType,
1099
+ userId: util.getStorage('userId'),
1100
+ notificationMsg: noticeInfo,
1101
+ customPresetUserJson: JSON.stringify(this.presetList),
1102
+ presetUserJson: JSON.stringify(this.presetUserJson),
1103
+ nextReadUserId: this.readMultiple
1104
+ ? this.mixReadList && this.mixReadList.join('|')
1105
+ : nextReadUserId,
1106
+ nextOrgId: !this.isShowNextUser
1107
+ ? this.multiple
1108
+ ? this.mixOrgIdList && this.mixOrgIdList.join('|')
1109
+ : nextOrgId
1110
+ : '',
1111
+ handleExplain: handleExplain,
1112
+ presetReadUserId:
1113
+ this.mixPresetList && this.mixPresetList.length > 0
1114
+ ? this.mixPresetList.join('|')
1115
+ : presetReadUserId.join(','),
1116
+ opinion: this.newOpinion || newOpinion
1117
+ };
1118
+ if (this.enableCustomLimitTimeSetting) {
1119
+ params.customLimitTime = customLimitTime;
1120
+ if (!customLimitTime) {
1121
+ this.$message.warning('请选择或输入限时办理的天数');
1122
+ this.nextNode.customLimitTime = '';
1123
+ return;
1124
+ } else if (
1125
+ !Number(customLimitTime) ||
1126
+ customLimitTime.indexOf('.') != -1 ||
1127
+ Number(customLimitTime) < 0
1128
+ ) {
1129
+ this.$message.warning('请输入正确的天数');
1130
+ this.nextNode.customLimitTime = '';
1131
+ return;
1132
+ }
1133
+ }
1134
+ if (this.isHideCurrentOrg) {
1135
+ params.nextCurrentOrgObj = nextCurrentOrgObj;
1136
+ }
1137
+ if (this.isHideOtherOrg) {
1138
+ params.nextOtherOrgObj = nextOtherOrgObj;
1139
+ }
1140
+ if (this.activeNames != '1') delete params.customPresetUserJson;
1141
+ if (this.isFreeStartFlow || this.formType === 'readTransfer') {
1142
+ let newParm = {};
1143
+ newParm.copyHistory =
1144
+ this.copyHistory === 'needCopyPendedHistory';
1145
+ newParm.startFlowParamJson = params;
1146
+ // newParm.startFlowParamJson.businessId = this.id; //this.id
1147
+ newParm.startFlowParamJson.taskExamineParam = {
1148
+ startFlowFirstNodeName: this.taskExamineParam
1149
+ };
1150
+ newParm.startFlowParamJson = JSON.stringify(
1151
+ newParm.startFlowParamJson
1152
+ );
1153
+ for (let key in this.taskParams) {
1154
+ if (Array.isArray(this.taskParams[key])) {
1155
+ this.taskParams[key] =
1156
+ this.taskParams[key].length > 0
1157
+ ? this.taskParams[key].join(',')
1158
+ : '';
1159
+ }
1160
+ }
1161
+
1162
+ newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
1163
+ if (this.formType == 'readTransfer') {
1164
+ newParm.readTransferHandleStartFlowParamJson =
1165
+ JSON.stringify(params);
1166
+ newParm.taskReadEndParamJson = JSON.stringify(
1167
+ this.taskParams
1168
+ );
1169
+ delete newParm.copyHistory;
1170
+ delete newParm.startFlowParamJson;
1171
+ delete newParm.submitTaskParamJson;
1172
+ }
1173
+ params = newParm;
1174
+ }
1175
+ if (this.copyHistory && !this.isFreeStartFlow) {
1176
+ params.pendingId = this.pendingId;
1177
+ delete params.businessId;
1178
+ }
1179
+ util
1180
+ .ajax({
1181
+ url: this.isFreeStartFlow
1182
+ ? freeStartFlowWithSubmitTask
1183
+ : this.formType == 'readTransfer'
1184
+ ? startReadTransferHandleFlowWithTaskReadEnd
1185
+ : this.copyHistory
1186
+ ? freeStartFlow
1187
+ : register,
1188
+ method: 'post',
1189
+ data: params
1190
+ })
1191
+ .then((res) => {
1192
+ const { status, message } = res;
1193
+ if (this.showBtn) {
1194
+ this.loading = false;
1195
+ } else {
1196
+ this.allLoading.close();
1197
+ }
1198
+ if (status === 'success' || res.rCode == 0) {
1199
+ this.quit(true);
1200
+ this.simpleTips && this.$message.success('操作成功');
1201
+ } else {
1202
+ this.$message.error(message || '系统错误,请联系管理员!');
1203
+ }
1204
+ })
1205
+ .catch((err) => {
1206
+ if (this.showBtn) {
1207
+ this.loading = false;
1208
+ } else {
1209
+ this.allLoading.close();
1210
+ }
1211
+ if (err.message && err.message !== 'canceled') {
1212
+ this.$message.error(err.message);
1213
+ }
1214
+ });
1215
+ });
1216
+ return;
1217
+ }
1218
+ if (this.showBtn) {
1219
+ this.loading = true;
1220
+ } else {
1221
+ this.allLoading = util.loading(this.$loading, '加载中...');
1222
+ }
1223
+ let newNextUser = [];
1224
+ if (this.multiple) {
1225
+ nextUser && nextUser.map((item) => newNextUser.push(item));
1226
+ }
1227
+ let newNoticeType = '';
1228
+ if (noticeType) {
1229
+ newNoticeType = noticeType.join(',');
1230
+ }
1231
+ let params = {
1232
+ processDefinitionId: this.processDefinitionId,
1233
+ nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
1234
+ nextNodeId: nextNode,
1235
+ businessId: this.businessId,
1236
+ notificationType: newNoticeType,
1237
+ userId: util.getStorage('userId'),
1238
+ notificationMsg: noticeInfo,
1239
+ customPresetUserJson: JSON.stringify(this.presetList),
1240
+ presetUserJson: JSON.stringify(this.presetUserJson),
1241
+ nextReadUserId: this.readMultiple
1242
+ ? this.mixReadList && this.mixReadList.join('|')
1243
+ : nextReadUserId,
1244
+ nextOrgId: !this.isShowNextUser
1245
+ ? this.multiple
1246
+ ? this.mixOrgIdList && this.mixOrgIdList.join('|')
1247
+ : nextOrgId
1248
+ : '',
1249
+ handleExplain: handleExplain,
1250
+ presetReadUserId:
1251
+ this.mixPresetList && this.mixPresetList.length > 0
1252
+ ? this.mixPresetList.join('|')
1253
+ : presetReadUserId.join(','),
1254
+ opinion: this.newOpinion || newOpinion
1255
+ };
1256
+ if (this.enableCustomLimitTimeSetting) {
1257
+ params.customLimitTime = customLimitTime;
1258
+ if (!customLimitTime) {
1259
+ this.$message.warning('请选择或输入限时办理的天数');
1260
+ this.nextNode.customLimitTime = '';
1261
+ return;
1262
+ } else if (
1263
+ !Number(customLimitTime) ||
1264
+ customLimitTime.indexOf('.') != -1 ||
1265
+ Number(customLimitTime) < 0
1266
+ ) {
1267
+ this.$message.warning('请输入正确的天数');
1268
+ this.nextNode.customLimitTime = '';
1269
+ return;
1270
+ }
1271
+ }
1272
+ if (this.isHideCurrentOrg) {
1273
+ params.nextCurrentOrgObj = nextCurrentOrgObj;
1274
+ }
1275
+ if (this.isHideOtherOrg) {
1276
+ params.nextOtherOrgObj = nextOtherOrgObj;
1277
+ }
1278
+ if (this.activeNames != '1') delete params.customPresetUserJson;
1279
+ if (this.isFreeStartFlow || this.formType === 'readTransfer') {
1280
+ let newParm = {};
1281
+ newParm.copyHistory = this.copyHistory === 'needCopyPendedHistory';
1282
+ newParm.startFlowParamJson = params;
1283
+ // newParm.startFlowParamJson.businessId = this.id; //this.id
1284
+ newParm.startFlowParamJson.taskExamineParam = {
1285
+ startFlowFirstNodeName: this.taskExamineParam
1286
+ };
1287
+ newParm.startFlowParamJson = JSON.stringify(
1288
+ newParm.startFlowParamJson
1289
+ );
1290
+ for (let key in this.taskParams) {
1291
+ if (Array.isArray(this.taskParams[key])) {
1292
+ this.taskParams[key] =
1293
+ this.taskParams[key].length > 0
1294
+ ? this.taskParams[key].join(',')
1295
+ : '';
1296
+ }
1297
+ }
1298
+
1299
+ newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
1300
+ if (this.formType == 'readTransfer') {
1301
+ newParm.readTransferHandleStartFlowParamJson =
1302
+ JSON.stringify(params);
1303
+ newParm.taskReadEndParamJson = JSON.stringify(this.taskParams);
1304
+ delete newParm.copyHistory;
1305
+ delete newParm.startFlowParamJson;
1306
+ delete newParm.submitTaskParamJson;
1307
+ }
1308
+ params = newParm;
1309
+ }
1310
+ if (this.copyHistory && !this.isFreeStartFlow) {
1311
+ params.pendingId = this.pendingId;
1312
+ delete params.businessId;
1313
+ }
1314
+ util
1315
+ .ajax({
1316
+ url: this.isFreeStartFlow
1317
+ ? freeStartFlowWithSubmitTask
1318
+ : this.formType == 'readTransfer'
1319
+ ? startReadTransferHandleFlowWithTaskReadEnd
1320
+ : this.copyHistory
1321
+ ? freeStartFlow
1322
+ : register,
1323
+ method: 'post',
1324
+ data: params
1325
+ })
1326
+ .then((res) => {
1327
+ const { status, message } = res;
1328
+ if (this.showBtn) {
1329
+ this.loading = false;
1330
+ } else {
1331
+ this.allLoading.close();
1332
+ }
1333
+ if (status === 'success' || res.rCode == 0) {
1334
+ this.quit(true);
1335
+ this.simpleTips && this.$message.success('操作成功');
1336
+ } else {
1337
+ this.$message.error(message || '系统错误,请联系管理员!');
1338
+ }
1339
+ })
1340
+ .catch((err) => {
1341
+ if (this.showBtn) {
1342
+ this.loading = false;
1343
+ } else {
1344
+ this.allLoading.close();
1345
+ }
1346
+ if (err.message && err.message !== 'canceled') {
1347
+ this.$message.error(err.message);
1348
+ }
1349
+ });
1350
+ } else {
1351
+ return false;
1352
+ }
1353
+ });
1354
+ },
1355
+ getNodeInfos(nodeId, index) {
1356
+ let params = {
1357
+ processDefinitionId: this.processDefinitionId,
1358
+ nextNodeId: nodeId ? nodeId : this.nextNode.nextNode,
1359
+ businessId: this.id,
1360
+ userId: util.getStorage('userId')
1361
+ };
1362
+ util
1363
+ .ajax({ url: getNodeInfo, params })
1364
+ .then((res) => {
1365
+ const {
1366
+ status,
1367
+ message,
1368
+ data: {
1369
+ nextUserList,
1370
+ nodeExtAttr,
1371
+ nodeMoreInfo,
1372
+ countersignaturetypeText,
1373
+ countersignaturetypeCode
1374
+ }
1375
+ } = res;
1376
+ if (this.showBtn) {
1377
+ this.loading = false;
1378
+ } else {
1379
+ this.allLoading.close();
1380
+ }
1381
+ if (status === 'success') {
1382
+ if( this.currentOrgSelectorParams.department && !this.currentOrgSelectorParams.department.roleid && this.selectorParams.roleid && nodeExtAttr.deptRoleCode){
1383
+ this.currentOrgSelectorParams.department.roleid = nodeExtAttr.deptRoleCode;
1384
+ }
1385
+ this.isCurrentNodeForbiddenChangeCandidate =
1386
+ nodeExtAttr.isCurrentNodeForbiddenChangeCandidate;
1387
+ this.nextNode.userInfo = nextUserList;
1388
+ this.countersignaturetypeCode = countersignaturetypeCode;
1389
+ this.nextNode.countersignaturetypeText = countersignaturetypeText;
1390
+ this.enableCustomLimitTimeSetting =
1391
+ nodeExtAttr.enableCustomLimitTimeSetting == 1;
1392
+ if (nodeMoreInfo.currentOrgDefaultSelectObjectItems) {
1393
+ this.nextCurrentOrgselectUserList = []
1394
+ if (
1395
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.deptIds.length >
1396
+ 0
1397
+ ) {
1398
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.deptIds.map(
1399
+ (x, i) => {
1400
+ this.nextCurrentOrgselectUserList.push({
1401
+ showname:
1402
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems
1403
+ .deptNames[i],
1404
+ showid: x,
1405
+ stype: 'department'
1406
+ });
1407
+ }
1408
+ );
1409
+ }
1410
+ if (
1411
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.userIds.length >
1412
+ 0
1413
+ ) {
1414
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.userIds.map(
1415
+ (x, i) => {
1416
+ this.nextCurrentOrgselectUserList.push({
1417
+ showname:
1418
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems
1419
+ .userNames[i],
1420
+ showid: x,
1421
+ stype: 'employee'
1422
+ });
1423
+ }
1424
+ );
1425
+ }
1426
+ if (
1427
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.orgIds.length >
1428
+ 0
1429
+ ) {
1430
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems.orgIds.map(
1431
+ (x, i) => {
1432
+ this.nextCurrentOrgselectUserList.push({
1433
+ showname:
1434
+ nodeMoreInfo.currentOrgDefaultSelectObjectItems
1435
+ .orgNames[i],
1436
+ showid: x,
1437
+ stype: 'enterprise'
1438
+ });
1439
+ }
1440
+ );
1441
+ }
1442
+ this.nextNode.nextCurrentOrgObj = nodeMoreInfo.currentOrgDefaultSelectObjects
1443
+ }
1444
+ if (
1445
+ this.enableCustomLimitTimeSetting &&
1446
+ nodeMoreInfo.defaultCustomLimitDays
1447
+ ) {
1448
+ this.nextNode.customLimitTime =
1449
+ this.nextNode.customLimitTimeText =
1450
+ nodeMoreInfo.defaultCustomLimitDays + '';
1451
+ }
1452
+ this.isTaskread = nodeExtAttr.isTaskread;
1453
+ this.isHandleExplain = nodeExtAttr.isHandleExplain;
1454
+ this.isCustomUser = nodeExtAttr.isCustomUser; //是否展示选人组件按钮
1455
+ this.presetEdit = nodeExtAttr.presetEdit; //是否展示备选人
1456
+ this.isDefSelectedObj = nodeExtAttr.isDefSelectedObj; //是否默认选中
1457
+ if (
1458
+ nodeExtAttr.userSelectionType == 7 ||
1459
+ nodeExtAttr.userSelectionType == 8 ||
1460
+ nodeExtAttr.userSelectionType == 9 ||
1461
+ nodeExtAttr.userSelectionType == 10 ||
1462
+ nodeExtAttr.userSelectionType == 11 ||
1463
+ nodeExtAttr.userSelectionType == 12
1464
+ ) {
1465
+ this.getIsShowNextUser(
1466
+ nodeExtAttr && nodeExtAttr.userSelectionType
1467
+ );
1468
+ } else {
1469
+ const { multiple, params } = this.isMultiple(
1470
+ nodeExtAttr.userSelectionType
1471
+ );
1472
+ this.multiple = multiple;
1473
+ this.params = params;
1474
+ }
1475
+ // this.isReadMultiple(nodeExtAttr.userSelectionType);
1476
+ if (nodeExtAttr.nodeType === 1 || nodeExtAttr.nodeType === 2) {
1477
+ this.isHideCurrentOrg =
1478
+ nodeExtAttr.isHideCurrentOrg == 1 ? false : true; //判断是否隐藏本单位
1479
+ this.isHideOtherOrg =
1480
+ nodeExtAttr.isHideOtherOrg == 1 ? false : true; //判断是否隐藏外单位
1481
+ } else {
1482
+ this.isHideCurrentOrg = false;
1483
+ this.isHideOtherOrg = false;
1484
+ }
1485
+ nextUserList.map((item) => {
1486
+ if (
1487
+ this.multiple &&
1488
+ nodeExtAttr.isDefSelectedObj == 1 &&
1489
+ nextUserList !== undefined
1490
+ ) {
1491
+ this.nextNode.nextUser.push(item.userId);
1492
+ this.selectUserList.push({
1493
+ showname: item.username,
1494
+ showid: item.userId
1495
+ });
1496
+ }
1497
+
1498
+ this.options.push({
1499
+ showname: item.username,
1500
+ showid: item.userId
1501
+ });
1502
+ });
1503
+ if (this.multiple) {
1504
+ this.nextNode.nextReadUserId = [];
1505
+ } else {
1506
+ this.nextNode.nextReadUserId = '';
1507
+ }
1508
+ if (
1509
+ nextUserList.length > 0 &&
1510
+ nodeExtAttr.isDefSelectedObj == 1 &&
1511
+ !this.multiple
1512
+ ) {
1513
+ this.nextNode.nextUser = nextUserList[0].userId;
1514
+ this.selectUserList.push({
1515
+ showname: nextUserList[0].username,
1516
+ showid: nextUserList[0].userId
1517
+ });
1518
+ }
1519
+ this.radioList = this.options;
1520
+ } else {
1521
+ this.$message.error(message || '系统错误,请联系管理员!');
1522
+ }
1523
+ nodeId && this.$refs.selectUser[index].changeInfo();
1524
+ })
1525
+ .catch((err) => {
1526
+ if (this.showBtn) {
1527
+ this.loading = false;
1528
+ } else {
1529
+ this.allLoading.close();
1530
+ }
1531
+ if (err.message && err.message !== 'canceled') {
1532
+ this.$message.error(err.message);
1533
+ }
1534
+ });
1535
+ },
1536
+ changeSel(val) {
1537
+ this.nextNode.nextUser = [];
1538
+ this.options = [];
1539
+ this.selectUserList = [];
1540
+ this.radioList = [];
1541
+ if (this.showBtn) {
1542
+ this.loading = true;
1543
+ } else {
1544
+ this.allLoading = util.loading(this.$loading, '加载中...');
1545
+ }
1546
+ this.getNodeInfos();
1547
+ },
1548
+ // 取消
1549
+ quit(val) {
1550
+ if (val === true) return this.$emit('cancel', val);
1551
+ this.$emit('cancel', false);
1552
+ },
1553
+ getFind() {
1554
+ util
1555
+ .ajax({
1556
+ url: findSysCodes
1557
+ })
1558
+ .then((res) => {
1559
+ const { status, message } = res;
1560
+ if (status === 'success') {
1561
+ if (this.hideMessage) return;
1562
+ this.nextNode.noticeType = message.split(',');
1563
+ let arr = [];
1564
+ this.nextNode.noticeList.map((item) => {
1565
+ this.nextNode.noticeType.map((x) => {
1566
+ if (x == item.cciValue) {
1567
+ arr.push(x);
1568
+ }
1569
+ });
1570
+ });
1571
+ this.nextNode.noticeType = arr;
1572
+ } else {
1573
+ this.$message.error(message || '系统错误,请联系管理员!');
1574
+ }
1575
+ })
1576
+ .catch((err) => {
1577
+ if (this.showBtn) {
1578
+ this.loading = false;
1579
+ } else {
1580
+ this.allLoading.close();
1581
+ }
1582
+ if (err.message && err.message !== 'canceled') {
1583
+ this.$message.error(err.message);
1584
+ }
1585
+ });
1586
+ },
1587
+ /**
1588
+ * isMultiple
1589
+ * @desc:是否多选
1590
+ * @author liufan
1591
+ * @date 2022年9月13日
1592
+ **/
1593
+ isMultiple(val, choiceOrgId, choiceDeptId, pOrgId) {
1594
+ let multiple = false;
1595
+ let params = {};
1596
+ if (val == 2 || val == 4 || val == 6 || val == 16 || val == 12) {
1597
+ multiple = true;
1598
+ }
1599
+ if (val == 1 || val == 2 || val == 5) {
1600
+ params.filid = this.userModel.orgId;
1601
+ params.only_filid = true;
1602
+ if (choiceOrgId) {
1603
+ params.filid = choiceOrgId;
1604
+ }
1605
+ }
1606
+ if (val == 5 || val == 6) {
1607
+ params.filid = this.userModel.orgId;
1608
+ params.mydeptid = this.userModel.depId;
1609
+ if (choiceDeptId) {
1610
+ params.mydeptid = choiceDeptId;
1611
+ }
1612
+ if (choiceOrgId) {
1613
+ params.filid = choiceOrgId;
1614
+ }
1615
+ }
1616
+ if (val == 15 || val == 16) {
1617
+ params.filid = this.userModel.orgId;
1618
+ if (pOrgId) {
1619
+ params.filid = pOrgId;
1620
+ }
1621
+ }
1622
+ return { multiple, params };
1623
+ },
1624
+ getStartFlow(processId) {
1625
+ if (!processId) {
1626
+ return false;
1627
+ }
1628
+ if (this.showBtn) {
1629
+ this.loading = true;
1630
+ } else {
1631
+ this.allLoading = util.loading(this.$loading, '加载中...');
1632
+ }
1633
+ this.businessId = this.id;
1634
+ let params = {
1635
+ processDefinitionId: processId, // processId || this.processDefinitionId,
1636
+ userId: util.getStorage('userId'),
1637
+ businessId: this.businessId
1638
+ };
1639
+ if (!this.shwowBtn) {
1640
+ params.taskAction = 'toStartFlowWithoutTempSave';
1641
+ }
1642
+ // 获取节点
1643
+ util
1644
+ .ajax({ url: toStartFlow, params })
1645
+ .then((res) => {
1646
+ //pc接口返回数据处理
1647
+ const { status, message, data } = res;
1648
+ if (status == 'success') {
1649
+ data.nodeInfoMap.nodeExtAttr.submitTipsMsg &&
1650
+ this.$confirm(
1651
+ data.nodeInfoMap.nodeExtAttr.submitTipsMsg,
1652
+ '提示',
1653
+ {
1654
+ confirmButtonText: '确定',
1655
+ cancelButtonText: '取消',
1656
+ type: 'warning'
1657
+ }
1658
+ )
1659
+ .then(() => {})
1660
+ .catch(() => {
1661
+ this.quit();
1662
+ });
1663
+ data.nextNodeCheckType &&
1664
+ (this.nextNodeCheckType = data.nextNodeCheckType);
1665
+ data.nextOperateCheckType &&
1666
+ (this.nextOperateCheckType = data.nextOperateCheckType);
1667
+ if (data.currentOrgSelectorParams) {
1668
+ if (
1669
+ data.currentOrgSelectorParams.enableCurrentOrgConfig == 'true'
1670
+ ) {
1671
+ this.currentOrgSelectorTabs =
1672
+ data.currentOrgSelectorParams.currentOrgType.split(',');
1673
+ let currentOrgparams =
1674
+ data.currentOrgSelectorParams.currentOrgRange.split(',');
1675
+ this.currentOrgSelectorTabs.map((x, i) => {
1676
+ this.currentOrgSelectorParams[x] = {
1677
+ filid:
1678
+ currentOrgparams[i] == 'my'
1679
+ ? JSON.parse(util.getStorage('mainConfig')).userModel
1680
+ .orgId
1681
+ : currentOrgparams[i],
1682
+ only_filid: true
1683
+ };
1684
+ });
1685
+ }
1686
+ }
1687
+ this.customPresetHintMessage = data.customPresetHintMessage;
1688
+ this.readOnlyNotificationType = data.readOnlyNotificationType;
1689
+ this.notificationMessageReadOnly =
1690
+ data.notificationMessageReadOnly == 'true';
1691
+ this.nextNode.nodeInfo = data.nextNodeList;
1692
+ this.nextNode.nextNode = data.nextNodeList[0].nodeId;
1693
+ this.isPreset = data.isPreset;
1694
+ this.isHideDefaultOperation =
1695
+ data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation;
1696
+ this.defaultNextNode = data.nodeInfoMap.nodeExtAttr.defaultNextNode;
1697
+ this.isChooseNextNode =
1698
+ data.nodeInfoMap.nodeExtAttr.isChooseNextNode;
1699
+ this.isCdjxjTaskHandle = data.isCdjxjTaskHandle;
1700
+ if (this.isChooseNextNode == 1) {
1701
+ this.operationList = [
1702
+ // { key: 0, value: '默认', list: [] },
1703
+ { key: 1, value: '自定义', list: [] }
1704
+ ];
1705
+ if (data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation != 1) {
1706
+ this.operationList.unshift({
1707
+ key: 0,
1708
+ value: '默认',
1709
+ list: data.nextNodeList
1710
+ });
1711
+ }
1712
+ let arr = [];
1713
+ for (let key in data.taskNodeMap) {
1714
+ arr.push({ nodeName: data.taskNodeMap[key], nodeId: key });
1715
+ }
1716
+ // this.operationList[0].list = data.nextNodeList;
1717
+ this.operationList[
1718
+ data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation != 1 ? 1 : 0
1719
+ ].list = arr;
1720
+ if (this.isHideDefaultOperation != 1) {
1721
+ this.nextNode.nextOperate = 0;
1722
+ this.nextNode.nodeInfo = this.operationList[0].list;
1723
+ if (this.nextNode.nodeInfo.length > 0) {
1724
+ let defaultNodeData = data.nextNodeList.filter(
1725
+ (x) => x.nodeId == this.defaultNextNode
1726
+ );
1727
+ this.nextNode.nextNode =
1728
+ defaultNodeData.length > 0
1729
+ ? this.defaultNextNode
1730
+ : data.nextNodeList[0].nodeId;
1731
+ }
1732
+ }
1733
+ if (
1734
+ data.nodeInfoMap.nodeExtAttr.defaultNextOperate == 1 ||
1735
+ data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation == 1
1736
+ ) {
1737
+ // this.nextNode.nodeInfo = data.nextNodeList
1738
+ this.nextNode.nextOperate = 1;
1739
+ this.nextNode.nodeInfo =
1740
+ this.operationList[
1741
+ this.isHideDefaultOperation != 1 ? 1 : 0
1742
+ ].list;
1743
+
1744
+ if (this.nextNode.nodeInfo.length > 0) {
1745
+ let defaultNodeData = this.nextNode.nodeInfo.filter(
1746
+ (x) => x.nodeId == this.defaultNextNode
1747
+ );
1748
+ this.nextNode.nextNode =
1749
+ defaultNodeData.length > 0
1750
+ ? this.defaultNextNode
1751
+ : this.nextNode.nodeInfo[0].nodeId;
1752
+ }
1753
+ }
1754
+ }
1755
+ this.isCustomPreset = data.isCustomPreset;
1756
+ this.presetTaskNodeKeyStr = data.presetTaskNodeKeyStr;
1757
+ this.presetTaskNodeMap = data.presetTaskNodeMap;
1758
+ this.isSinglePage = data.taskExamine.isSinglePage;
1759
+ this.isSinglePage &&
1760
+ (this.nextNode.opinion = data.taskExamine.opinion);
1761
+ // this.nextNode.noticeInfo = data.taskExamine.notificationMsg;
1762
+ this.nextNode.nodeName = data.taskExamine.nodeName;
1763
+ this.canPresetRead = data.canPresetRead;
1764
+ if (data.canPresetRead) {
1765
+ let ids =
1766
+ data.nodeInfoMap.nodeExtAttr.presetReadCandinateIds.split(',');
1767
+ let names =
1768
+ data.nodeInfoMap.nodeExtAttr.presetReadCandinateNames.split(
1769
+ ','
1770
+ );
1771
+ ids.map((item, index) => {
1772
+ this.presetReadUserId.push({
1773
+ showid: item,
1774
+ showname: names[index]
1775
+ });
1776
+ this.selectPresetUserList.push({
1777
+ showid: item,
1778
+ showname: names[index]
1779
+ });
1780
+ this.nextNode.presetReadUserId.push(item);
1781
+ });
1782
+ }
1783
+ this.getNodeInfos();
1784
+ // this.getPresetFlowInfo();
1785
+ this.isCustomPreset &&
1786
+ this.$refs.customPreset.getPresetFlowInfo(this.nextNode.nextNode);
1787
+ this.getFind();
1788
+ this.getMessage();
1789
+ } else {
1790
+ this.$message.error(message || '系统错误,请联系管理员!');
1791
+ }
1792
+ })
1793
+ .catch((err) => {
1794
+ if (this.showBtn) {
1795
+ this.loading = false;
1796
+ } else {
1797
+ this.allLoading.close();
1798
+ }
1799
+ if (err.message && err.message !== 'canceled') {
1800
+ this.$message.error(err.message);
1801
+ }
1802
+ });
1803
+ }
1804
+ }
1805
+ };
1806
+ </script>