eoss-ui 0.7.25 → 0.7.27

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 (253) hide show
  1. package/lib/calogin.js +233 -233
  2. package/lib/eoss-ui.common.js +976 -1018
  3. package/lib/flow-list.js +106 -88
  4. package/lib/flow.js +464 -532
  5. package/lib/index.js +1 -1
  6. package/lib/main.js +146 -141
  7. package/lib/menu.js +6 -3
  8. package/lib/qr-code.js +13 -13
  9. package/lib/theme-chalk/flow.css +1 -1
  10. package/lib/theme-chalk/index.css +1 -1
  11. package/lib/theme-chalk/main.css +1 -1
  12. package/lib/theme-chalk/menu.css +1 -1
  13. package/lib/theme-chalk/simplicity.css +1 -1
  14. package/package.json +160 -160
  15. package/packages/button/index.js +5 -5
  16. package/packages/button/src/main.vue +418 -418
  17. package/packages/button-group/index.js +5 -5
  18. package/packages/button-group/src/main.vue +346 -346
  19. package/packages/calendar/index.js +5 -5
  20. package/packages/calogin/index.js +5 -5
  21. package/packages/calogin/src/main.vue +412 -412
  22. package/packages/calogin/src/plugin.js +915 -915
  23. package/packages/card/index.js +5 -5
  24. package/packages/card/src/main.vue +156 -156
  25. package/packages/cascader/index.js +5 -5
  26. package/packages/cascader/src/main.vue +168 -168
  27. package/packages/checkbox-group/index.js +5 -5
  28. package/packages/checkbox-group/src/main.vue +333 -333
  29. package/packages/clients/index.js +5 -5
  30. package/packages/clients/src/main.vue +151 -151
  31. package/packages/data-table/index.js +5 -5
  32. package/packages/data-table/src/children.vue +39 -39
  33. package/packages/data-table/src/column.vue +988 -988
  34. package/packages/data-table/src/main.vue +1831 -1831
  35. package/packages/data-table/src/sizer.vue +195 -195
  36. package/packages/data-table-form/index.js +5 -5
  37. package/packages/data-table-form/src/checkbox.vue +101 -101
  38. package/packages/data-table-form/src/colgroup.vue +17 -17
  39. package/packages/data-table-form/src/main.vue +181 -181
  40. package/packages/data-table-form/src/radio.vue +65 -65
  41. package/packages/data-table-form/src/table.vue +233 -233
  42. package/packages/data-table-form/src/tbody.vue +336 -336
  43. package/packages/data-table-form/src/thead.vue +68 -68
  44. package/packages/date-picker/index.js +5 -5
  45. package/packages/date-picker/src/main.vue +236 -236
  46. package/packages/dialog/index.js +5 -5
  47. package/packages/enable-drag/index.js +5 -5
  48. package/packages/enterprise/index.js +5 -5
  49. package/packages/enterprise/src/main.vue +66 -66
  50. package/packages/error-page/index.js +5 -5
  51. package/packages/error-page/src/main.vue +44 -44
  52. package/packages/flow/index.js +5 -5
  53. package/packages/flow/src/component/Circulate.vue +413 -413
  54. package/packages/flow/src/component/CommonOpinions.vue +373 -373
  55. package/packages/flow/src/component/CustomPreset.vue +322 -322
  56. package/packages/flow/src/component/FileList.vue +97 -97
  57. package/packages/flow/src/component/FreeCirculation.vue +240 -240
  58. package/packages/flow/src/component/Preset.vue +255 -255
  59. package/packages/flow/src/component/SendMsg.vue +242 -242
  60. package/packages/flow/src/component/TimeLimit.vue +190 -190
  61. package/packages/flow/src/component/taskUnionExamine.vue +755 -738
  62. package/packages/flow/src/form.vue +121 -121
  63. package/packages/flow/src/freeStartFlow.vue +2847 -2847
  64. package/packages/flow/src/main.vue +3854 -3843
  65. package/packages/flow/src/processForm.vue +1363 -1370
  66. package/packages/flow/src/processReject.vue +309 -308
  67. package/packages/flow/src/reset.vue +941 -941
  68. package/packages/flow/src/startTaskRead.vue +691 -691
  69. package/packages/flow/src/supervise.vue +159 -159
  70. package/packages/flow/src/table.vue +58 -58
  71. package/packages/flow-group/index.js +5 -5
  72. package/packages/flow-group/src/main.vue +717 -717
  73. package/packages/flow-list/index.js +5 -5
  74. package/packages/flow-list/src/main.vue +1787 -1770
  75. package/packages/form/index.js +5 -5
  76. package/packages/form/src/main.vue +3901 -3901
  77. package/packages/form/src/table.vue +1512 -1512
  78. package/packages/handle-user/index.js +5 -5
  79. package/packages/handle-user/src/main.vue +137 -137
  80. package/packages/handler/index.js +5 -5
  81. package/packages/handler/src/main.vue +496 -496
  82. package/packages/icon/index.js +5 -5
  83. package/packages/icon/src/main.vue +104 -104
  84. package/packages/icons/index.js +5 -5
  85. package/packages/icons/src/main.vue +81 -81
  86. package/packages/input/index.js +5 -5
  87. package/packages/input/src/main.vue +356 -356
  88. package/packages/input-number/index.js +5 -5
  89. package/packages/input-number/src/main.vue +106 -106
  90. package/packages/label/index.js +5 -5
  91. package/packages/label/src/main.vue +457 -457
  92. package/packages/layout/index.js +5 -5
  93. package/packages/layout/src/item.vue +152 -152
  94. package/packages/layout/src/main.vue +31 -31
  95. package/packages/login/index.js +5 -5
  96. package/packages/login/src/main.vue +2020 -2020
  97. package/packages/login/src/resetPassword.vue +557 -557
  98. package/packages/main/index.js +5 -5
  99. package/packages/main/src/default/message.vue +249 -249
  100. package/packages/main/src/default/notice.vue +157 -157
  101. package/packages/main/src/default/userinfo.vue +502 -502
  102. package/packages/main/src/public/online.vue +89 -89
  103. package/packages/main/src/public/search.vue +464 -464
  104. package/packages/main/src/public/settings.vue +221 -221
  105. package/packages/main/src/simplicity/apps.vue +388 -388
  106. package/packages/main/src/simplicity/avatar.vue +82 -82
  107. package/packages/main/src/simplicity/handler.vue +263 -263
  108. package/packages/main/src/simplicity/index.vue +2135 -2130
  109. package/packages/main/src/simplicity/lists.vue +84 -84
  110. package/packages/main/src/simplicity/menu-list.vue +135 -135
  111. package/packages/main/src/simplicity/message.vue +259 -259
  112. package/packages/main/src/simplicity/notice.vue +190 -190
  113. package/packages/main/src/simplicity/router-page.vue +45 -45
  114. package/packages/main/src/simplicity/sub-menu.vue +264 -264
  115. package/packages/main/src/simplicity/user.vue +259 -259
  116. package/packages/main/src/simplicity/userinfo.vue +398 -398
  117. package/packages/menu/index.js +5 -5
  118. package/packages/menu/src/main.vue +596 -584
  119. package/packages/nav/index.js +5 -5
  120. package/packages/nav/src/main.vue +351 -351
  121. package/packages/notify/index.js +5 -5
  122. package/packages/notify/src/main.vue +538 -538
  123. package/packages/page/index.js +5 -5
  124. package/packages/page/src/main.vue +167 -167
  125. package/packages/pagination/index.js +5 -5
  126. package/packages/pagination/src/main.vue +96 -96
  127. package/packages/player/index.js +5 -5
  128. package/packages/player/src/main.vue +194 -194
  129. package/packages/qr-code/index.js +5 -5
  130. package/packages/qr-code/src/main.vue +170 -170
  131. package/packages/radio-group/index.js +6 -6
  132. package/packages/radio-group/src/main.vue +319 -319
  133. package/packages/retrial-auth/index.js +5 -5
  134. package/packages/retrial-auth/src/main.vue +280 -280
  135. package/packages/select/index.js +5 -5
  136. package/packages/select/src/main.vue +782 -782
  137. package/packages/select-ganged/index.js +5 -5
  138. package/packages/select-ganged/src/main.vue +724 -724
  139. package/packages/selector/index.js +5 -5
  140. package/packages/selector/src/main.vue +761 -761
  141. package/packages/selector-panel/index.js +5 -5
  142. package/packages/selector-panel/src/main.vue +1027 -1027
  143. package/packages/selector-panel/src/selection.vue +170 -170
  144. package/packages/selector-panel/src/tree.vue +129 -129
  145. package/packages/sizer/index.js +5 -5
  146. package/packages/sizer/src/main.vue +254 -254
  147. package/packages/steps/index.js +5 -5
  148. package/packages/steps/src/main.vue +181 -181
  149. package/packages/switch/index.js +5 -5
  150. package/packages/switch/src/main.vue +170 -170
  151. package/packages/table-form/index.js +5 -5
  152. package/packages/tabs/index.js +5 -5
  153. package/packages/tabs/src/main.vue +788 -788
  154. package/packages/tabs-panel/index.js +5 -5
  155. package/packages/tabs-panel/src/main.vue +29 -29
  156. package/packages/theme-chalk/lib/flow.css +1 -1
  157. package/packages/theme-chalk/lib/index.css +1 -1
  158. package/packages/theme-chalk/lib/main.css +1 -1
  159. package/packages/theme-chalk/lib/menu.css +1 -1
  160. package/packages/theme-chalk/lib/simplicity.css +1 -1
  161. package/packages/theme-chalk/src/base.scss +261 -261
  162. package/packages/theme-chalk/src/button-group.scss +176 -176
  163. package/packages/theme-chalk/src/button.scss +24 -24
  164. package/packages/theme-chalk/src/calendar.scss +113 -113
  165. package/packages/theme-chalk/src/card.scss +99 -99
  166. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  167. package/packages/theme-chalk/src/clients.scss +87 -87
  168. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  169. package/packages/theme-chalk/src/data-table.scss +293 -293
  170. package/packages/theme-chalk/src/date-picker.scss +7 -7
  171. package/packages/theme-chalk/src/dialog.scss +77 -77
  172. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  173. package/packages/theme-chalk/src/enterprise.scss +5 -5
  174. package/packages/theme-chalk/src/error-page.scss +18 -18
  175. package/packages/theme-chalk/src/flow-group.scss +110 -110
  176. package/packages/theme-chalk/src/flow-list.scss +39 -39
  177. package/packages/theme-chalk/src/flow.scss +351 -351
  178. package/packages/theme-chalk/src/form.scss +501 -501
  179. package/packages/theme-chalk/src/handle-user.scss +40 -40
  180. package/packages/theme-chalk/src/handler.scss +148 -148
  181. package/packages/theme-chalk/src/icon.scss +1817 -1817
  182. package/packages/theme-chalk/src/icons.scss +99 -99
  183. package/packages/theme-chalk/src/input.scss +9 -9
  184. package/packages/theme-chalk/src/label.scss +24 -24
  185. package/packages/theme-chalk/src/layout.scss +46 -46
  186. package/packages/theme-chalk/src/login.scss +987 -987
  187. package/packages/theme-chalk/src/main.scss +663 -663
  188. package/packages/theme-chalk/src/menu.scss +224 -222
  189. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  190. package/packages/theme-chalk/src/nav.scss +111 -111
  191. package/packages/theme-chalk/src/page.scss +3 -3
  192. package/packages/theme-chalk/src/pagination.scss +29 -29
  193. package/packages/theme-chalk/src/player.scss +9 -9
  194. package/packages/theme-chalk/src/qr-code.scss +17 -17
  195. package/packages/theme-chalk/src/radio-group.scss +9 -9
  196. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  197. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  198. package/packages/theme-chalk/src/select.scss +8 -8
  199. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  200. package/packages/theme-chalk/src/selector.scss +92 -92
  201. package/packages/theme-chalk/src/simplicity.scss +1370 -1366
  202. package/packages/theme-chalk/src/sizer.scss +36 -36
  203. package/packages/theme-chalk/src/steps.scss +88 -88
  204. package/packages/theme-chalk/src/switch.scss +3 -3
  205. package/packages/theme-chalk/src/table-form.scss +1 -1
  206. package/packages/theme-chalk/src/tabs.scss +87 -87
  207. package/packages/theme-chalk/src/tips.scss +7 -7
  208. package/packages/theme-chalk/src/toolbar.scss +179 -179
  209. package/packages/theme-chalk/src/tree-group.scss +72 -72
  210. package/packages/theme-chalk/src/tree.scss +165 -165
  211. package/packages/theme-chalk/src/upload.scss +172 -172
  212. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  213. package/packages/tips/index.js +5 -5
  214. package/packages/tips/src/main.vue +141 -141
  215. package/packages/toolbar/index.js +5 -5
  216. package/packages/toolbar/src/main.vue +430 -430
  217. package/packages/tree/index.js +5 -5
  218. package/packages/tree-group/index.js +5 -5
  219. package/packages/upload/index.js +5 -5
  220. package/packages/upload/src/main.vue +1343 -1343
  221. package/packages/upload/src/picture.js +15 -15
  222. package/packages/wujie/index.js +5 -5
  223. package/packages/wujie/src/main.vue +145 -145
  224. package/packages/wxlogin/index.js +5 -5
  225. package/packages/wxlogin/src/main.vue +128 -128
  226. package/src/config/api.js +315 -315
  227. package/src/config/image.js +2 -2
  228. package/src/index.js +163 -163
  229. package/src/utils/bus.js +3 -3
  230. package/src/utils/date-util.js +312 -312
  231. package/src/utils/http.js +50 -50
  232. package/src/utils/rules.js +18 -18
  233. package/src/utils/store.js +21 -21
  234. package/src/utils/webSocket.js +107 -107
  235. package/packages/.DS_Store +0 -0
  236. package/packages/calogin/.DS_Store +0 -0
  237. package/packages/date-picker/.DS_Store +0 -0
  238. package/packages/date-picker/src/.DS_Store +0 -0
  239. package/packages/flow/.DS_Store +0 -0
  240. package/packages/flow/src/.DS_Store +0 -0
  241. package/packages/flow-list/.DS_Store +0 -0
  242. package/packages/form/.DS_Store +0 -0
  243. package/packages/login/.DS_Store +0 -0
  244. package/packages/main/.DS_Store +0 -0
  245. package/packages/main/src/.DS_Store +0 -0
  246. package/packages/menu/.DS_Store +0 -0
  247. package/packages/select/.DS_Store +0 -0
  248. package/packages/selector/.DS_Store +0 -0
  249. package/packages/selector-panel/.DS_Store +0 -0
  250. package/packages/theme-chalk/src/.DS_Store +0 -0
  251. package/packages/upload/.DS_Store +0 -0
  252. package/src/.DS_Store +0 -0
  253. package/src/utils/.DS_Store +0 -0
@@ -1,1370 +1,1363 @@
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:${
19
- showBtn ? '430px' : 'auto'
20
- }; overflow-y: auto; margin-bottom: 10px`"
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
- :isCustomUser="isCustomUser"
129
- :options="options"
130
- :presetEdit="presetEdit"
131
- :isDefSelectedObj="isDefSelectedObj"
132
- :selectUserList="selectUserList"
133
- @change="changeSelectUser"
134
- :types="nextUserTypes"
135
- :params="params"
136
- />
137
- </el-form-item> -->
138
- <el-form-item
139
- :prop="isShowNextUser ? 'nextUser' : 'nextOrgId'"
140
- :label="isShowNextUser ? '下步办理人' : '办理对象'"
141
- >
142
- <SelectUser
143
- :nextUser="isShowNextUser ? nextNode.nextUser : nextNode.nextOrgId"
144
- :radioList="radioList"
145
- :multiple="multiple"
146
- :isCustomUser="!isShowNextUser ? 1 : isCustomUser"
147
- :isCurrentNodeForbiddenChangeCandidate="isCurrentNodeForbiddenChangeCandidate"
148
- :options="options"
149
- :presetEdit="presetEdit"
150
- :mix="multiple"
151
- :isDefSelectedObj="isDefSelectedObj"
152
- :selectUserList="selectUserList"
153
- @change="
154
- changeSelectUser(
155
- $event,
156
- isShowNextUser ? 'nextUser' : 'nextOrgId'
157
- )
158
- "
159
- :types="
160
- !isShowNextUser
161
- ? nextUserTypes
162
- : isCdjxjTaskHandle != 'true'
163
- ? ['employee', 'persongroup']
164
- : ['employee']
165
- "
166
- :params="isShowNextUser ? params : {}"
167
- :tabs="nextUserTabs"
168
- />
169
- </el-form-item>
170
- <el-form-item
171
- prop="nextReadUserId"
172
- v-if="isTaskread == 1"
173
- label="
174
- 分阅用户
175
- "
176
- >
177
- <SelectUser
178
- :nextUser="nextNode.nextReadUserId"
179
- :multiple="true"
180
- :selectUserList="selectReadUserList"
181
- :options="userOptions"
182
- title="分阅用户"
183
- :mix="true"
184
- :types="types"
185
- @change="changeSelectReadUser($event, 'nextReadUserId')"
186
- :tabs="tabs"
187
- />
188
- </el-form-item>
189
- <el-form-item
190
- prop="presetReadUserId"
191
- v-if="canPresetRead"
192
- label="
193
- 自动分阅
194
- "
195
- >
196
- <SelectUser
197
- :nextUser="nextNode.presetReadUserId"
198
- :multiple="true"
199
- :selectUserList="selectPresetUserList"
200
- :options="presetOptions"
201
- title="分阅用户"
202
- :radioList="presetReadUserId"
203
- :presetEdit="1"
204
- :mix="true"
205
- :types="types"
206
- @change="changeSelectReadUser($event, 'presetReadUserId')"
207
- :tabs="tabs"
208
- />
209
- </el-form-item>
210
- <el-form-item
211
- v-if="enableCustomLimitTimeSetting"
212
- prop="customLimitTime"
213
- label="限时办理"
214
- :rules="[
215
- {
216
- required: enableCustomLimitTimeSetting,
217
- message: showCustomLimitTimeText
218
- ? '请输入限时办理天数'
219
- : '请选择限时办理天数',
220
- trigger: 'blur'
221
- },
222
- {
223
- required: enableCustomLimitTimeSetting,
224
- validator: checkCustomLimitTime,
225
- trigger: 'blur'
226
- }
227
- ]"
228
- >
229
- <el-input
230
- v-model="nextNode.customLimitTime"
231
- placeholder="请输入限时办理的天数"
232
- class="input-with-select custom-limit-time"
233
- @change="changeCustomLimitTime"
234
- >
235
- <es-select
236
- v-if="!showCustomLimitTimeText"
237
- v-model="nextNode.customLimitTime"
238
- placeholder="请选择"
239
- slot="prepend"
240
- sysCode="bpm_custom_limit_time"
241
- ></es-select>
242
- <es-button
243
- type="primary"
244
- slot="append"
245
- @click="
246
- () => {
247
- nextNode.customLimitTime = '';
248
- showCustomLimitTimeText = !showCustomLimitTimeText;
249
- }
250
- "
251
- >切换{{
252
- showCustomLimitTimeText ? '选择框' : '文本框'
253
- }}</es-button
254
- >
255
- </el-input>
256
- </el-form-item>
257
- <el-form-item
258
- v-if="isHandleExplain == 1"
259
- prop="handleExplain"
260
- label="办理说明"
261
- >
262
- <el-input
263
- placeholder="请输入办理说明"
264
- v-model="nextNode.handleExplain"
265
- />
266
- </el-form-item>
267
- <el-form-item
268
- prop="noticeType"
269
- label="通知方式"
270
- v-show="showBtn && nextNode.noticeList.length > 0"
271
- >
272
- <el-checkbox-group v-model="nextNode.noticeType">
273
- <el-checkbox
274
- v-for="item of nextNode.noticeList"
275
- :key="item.cciValue"
276
- :label="item.cciValue"
277
- :disabled="
278
- readOnlyNotificationType
279
- ? readOnlyNotificationType.indexOf(item.cciValue) != -1
280
- : false
281
- "
282
- >
283
- {{ item.shortName }}
284
- </el-checkbox>
285
- </el-checkbox-group>
286
- </el-form-item>
287
- <el-form-item
288
- v-show="nextNode.noticeType.length != 0 && showBtn"
289
- prop="nextNode"
290
- label="通知消息"
291
- >
292
- <es-input
293
- style="
294
- border-color: #ccc;
295
- padding: 5px;
296
- border-radius: 5px;
297
- font-size: 13px;
298
- "
299
- type="textarea"
300
- v-model="nextNode.noticeInfo"
301
- :readonly="notificationMessageReadOnly"
302
- />
303
- </el-form-item>
304
- <CustomPreset
305
- v-show="isCustomPreset"
306
- ref="customPreset"
307
- @changeCustom="
308
- (data) => {
309
- presetList = data;
310
- }
311
- "
312
- :customPresetHintMessage="customPresetHintMessage"
313
- @changeActiveNames="(val) => (activeNames = val)"
314
- @loadingEnd="loading = false"
315
- @loadingStart="loading = true"
316
- :nextNode="nextNode.nextNode"
317
- :id="id"
318
- :processDefinitionId="processDefinitionId"
319
- />
320
- <Preset
321
- v-show="isPreset"
322
- @changePreset="
323
- (data) => {
324
- presetUserJson = data;
325
- }
326
- "
327
- @loadingEnd="loading = false"
328
- @loadingStart="loading = true"
329
- :customPresetHintMessage="customPresetHintMessage"
330
- :nodeId="nextNode.nextNode"
331
- :businessId="id"
332
- :processDefinitionId="processDefinitionId"
333
- :presetTaskNodeMap="presetTaskNodeMap"
334
- :presetTaskNodeKeyStr="presetTaskNodeKeyStr"
335
- />
336
- </div>
337
- <el-form-item style="margin-bottom: 0px" v-show="showBtn">
338
- <div style="text-align: right">
339
- <el-button
340
- type="primary"
341
- size="small"
342
- @click="subProcess('nextNode')"
343
- >
344
- 确认
345
- </el-button>
346
- <el-button size="small" @click="quit"> 取消 </el-button>
347
- </div>
348
- </el-form-item>
349
- </el-form>
350
- <div
351
- v-if="!showBtn && nextNode.noticeList.length > 0"
352
- style="padding: 5px; background: #fff"
353
- >
354
- <div class="news" @click="showNews = !showNews">
355
- <span class="news-item">消息通知</span>
356
- <span :class="showNews ? 'show' : 'sj'"></span>
357
- </div>
358
- <div v-if="showNews" ref="messagebox" style="transition: 1s">
359
- <el-checkbox-group v-model="nextNode.noticeType">
360
- <el-checkbox
361
- v-for="item of nextNode.noticeList"
362
- :key="item.cciValue"
363
- :label="item.cciValue"
364
- :disabled="
365
- readOnlyNotificationType
366
- ? readOnlyNotificationType.indexOf(item.cciValue) != -1
367
- : false
368
- "
369
- >
370
- {{ item.shortName }}
371
- </el-checkbox>
372
- </el-checkbox-group>
373
- <es-input
374
- style="
375
- border-color: #ccc;
376
- padding: 5px;
377
- border-radius: 5px;
378
- font-size: 13px;
379
- "
380
- autosize
381
- v-show="showNews"
382
- type="textarea"
383
- v-model="nextNode.noticeInfo"
384
- @change="handleChange"
385
- :readonly="notificationMessageReadOnly"
386
- />
387
- </div>
388
- </div>
389
- </div>
390
- </template>
391
-
392
- <script>
393
- import {
394
- toStartFlow,
395
- getNodeInfo,
396
- findSysCodes,
397
- getNotificationMsg,
398
- findCodeValues,
399
- loginUserInfo,
400
- register,
401
- freeStartFlow,
402
- freeStartFlowWithSubmitTask,
403
- startReadTransferHandleFlowWithTaskReadEnd
404
- } from 'eoss-ui/src/config/api';
405
- import util from 'eoss-ui/src/utils/util';
406
- import SelectUser from './selectUser.vue';
407
- import CommonOpinions from './component/CommonOpinions.vue';
408
- import CustomPreset from './component/CustomPreset.vue';
409
- import Preset from './component/Preset.vue';
410
- export default {
411
- name: 'ProcessForm',
412
-
413
- components: {
414
- [Option.name]: Option,
415
- [SelectUser.name]: SelectUser,
416
- [CustomPreset.name]: CustomPreset,
417
- [CommonOpinions.name]: CommonOpinions,
418
- Preset
419
- },
420
- props: {
421
- processDefinitionId: {
422
- type: String,
423
- default: ''
424
- },
425
- copyHistory: {
426
- type: String,
427
- default: ''
428
- },
429
- simpleTips: {
430
- type: Boolean,
431
- default: true
432
- },
433
- formType: {
434
- type: String,
435
- default: 'freeStart'
436
- },
437
- id: {
438
- type: String,
439
- default: ''
440
- },
441
- pendingId: {
442
- type: String,
443
- default: ''
444
- },
445
- opinion: {
446
- type: String,
447
- default: ''
448
- },
449
- isFreeStartFlow: {
450
- type: Boolean,
451
- default: false
452
- },
453
- taskParams: {
454
- type: Object,
455
- default: () => {}
456
- },
457
- taskExamineParam: {
458
- type: String,
459
- default: ''
460
- },
461
- labelPosition: {
462
- type: String,
463
- default: 'left'
464
- },
465
- formTitle: {
466
- type: String,
467
- default: ''
468
- },
469
- showBtn: { type: Boolean, default: true },
470
- messageType: {
471
- type: Array,
472
- default: () => []
473
- },
474
- urgencyLevel: {
475
- type: [Number, String],
476
- default: ''
477
- },
478
- keyCount: {
479
- type: [Number, String],
480
- default: 0
481
- }
482
- },
483
- data() {
484
- return {
485
- loading: false,
486
- isCustomUser: 0,
487
- isCurrentNodeForbiddenChangeCandidate:0,
488
- allLoading: null,
489
- selectUser: false,
490
- multiple: false,
491
- readMultiple: true,
492
- customPresetHintMessage: '', //流程预设标题
493
- nextNodeCheckType: 'select',
494
- nextOperateCheckType: 'select',
495
- showNews: false, // 是否展示通知信息
496
- notificationMessageReadOnly: false,
497
- isChangeMessage: false,
498
- readOnlyNotificationType: '',
499
- show: true,
500
- enableCustomLimitTimeSetting: false,
501
- radioList: [],
502
- showCustomLimitTimeText: false,
503
- activeNames: '',
504
- selectUserList: [],
505
- defaultNextNode: '',
506
- presetUserJson: [],
507
- businessId: '',
508
- isTaskread: 0, //是否显示分阅用户
509
- isHandleExplain: 0, //是否展示办理说明
510
- options: [],
511
- presetList: [],
512
- presetReadUserId: [], //自动分阅
513
- canPresetRead: false, //是否展示自动分阅
514
- nextUserTypes: ['employee', 'persongroup'],
515
- isCustomPreset: false, //是否展示预设节点
516
- isPreset: false, //是否展示预设办理人
517
- isSinglePage: false,
518
- presetEdit: 0,
519
- isDefSelectedObj: 0,
520
- isChooseNextNode: 0,
521
- isHideDefaultOperation: 0,
522
- countersignaturetypeCode: 0,
523
- presetTaskNodeKeyStr: '', //预设办理人顺序
524
- presetTaskNodeMap: {}, //预设办理人
525
- params: {
526
- filid: 'all', //选择范围(my:本单位/ "" or all:全部)
527
- selectmix: 'true1',
528
- deptid: '' //指定部门(my:本部门)
529
- },
530
- newOpinion: '',
531
- operationList: [],
532
- tabs: {
533
- employee: {
534
- param: {
535
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
536
- name: '本单位用户'
537
- }
538
- },
539
- department: {
540
- param: {
541
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
542
- }
543
- }
544
- },
545
- userModel: {},
546
- nextUserTabs: {},
547
- selectPresetUserList: [],
548
- presetOptions: [],
549
- selectReadUserList: [],
550
- userOptions: [],
551
- mixReadList: [],
552
- mixPresetList: [],
553
- isCdjxjTaskHandle: '',
554
- isShowNextUser: true,
555
- oldMessage: '',
556
- mixOrgIdList: [], //办理对象混选
557
- nextNode: {
558
- nodeName: '',
559
- customLimitTime: '',
560
- newOpinion: '',
561
- countersignaturetypeText: '',
562
- nextNode: '',
563
- nextReadUserId: [],
564
- nextOrgId: [],
565
- noticeType: [],
566
- nextOperate: '',
567
- nextUser: [],
568
- presetReadUserId: [], //自动分阅
569
- noticeInfo: '',
570
- nodeInfo: [],
571
- userInfo: [],
572
- handleExplain: '',
573
- noticeList: [],
574
- msgTypeCount: 0
575
- }
576
- };
577
- },
578
- watch: {
579
- messageType: {
580
- handler(val) {
581
- if (this.urgencyLevel) {
582
- this.nextNode.noticeList = val;
583
- let arr = [];
584
- this.nextNode.noticeList.map((item) => {
585
- this.nextNode.noticeType.map((x) => {
586
- if (x == item.cciValue) {
587
- arr.push(x);
588
- }
589
- });
590
- });
591
- this.nextNode.noticeType = arr;
592
- } else {
593
- this.msgTypeCount++;
594
- }
595
- }
596
- },
597
- processDefinitionId(val) {
598
- Object.assign(this.$data, this.$options.data());
599
- this.getUserInfo();
600
- this.getNodeType();
601
- this.getStartFlow(val);
602
- if (this.copyHistory) {
603
- this.nextNode.newOpinion = this.opinion;
604
- } else if (this.formType != 'readTransfer') {
605
- this.newOpinion = this.opinion;
606
- }
607
- // this.getStartFlow(val);
608
- },
609
- opinion(val) {
610
- this.newOpinion = this.opinion;
611
- },
612
- formTitle: {
613
- handler(val) {
614
- if (!this.showBtn && !this.isChangeMessage) {
615
- this.nextNode.noticeInfo = this.oldMessage.replace('{title}', val);
616
- }
617
- },
618
- deep: true,
619
- immediate: true
620
- }
621
- },
622
- computed: {
623
- rules() {
624
- return {
625
- customLimitTime: [
626
- {
627
- required: this.enableCustomLimitTimeSetting,
628
- message: this.showCustomLimitTimeText
629
- ? '请输入限时办理天数'
630
- : '请选择限时办理天数',
631
- trigger: 'blur'
632
- },
633
- {
634
- required: this.enableCustomLimitTimeSetting,
635
- validator: this.checkCustomLimitTime,
636
- trigger: 'blur'
637
- }
638
- ]
639
- };
640
- },
641
- types() {
642
- if (this.isCdjxjTaskHandle == 'true') {
643
- return ['employee', 'enterprise', 'department'];
644
- } else {
645
- return ['employee', 'enterprise', 'department', 'persongroup'];
646
- }
647
- }
648
- },
649
- created() {
650
- this.getUserInfo();
651
- },
652
- mounted() {
653
- if (!this.urgencyLevel) {
654
- this.getNodeType();
655
- }
656
- this.getStartFlow(this.processDefinitionId);
657
- if (this.copyHistory) {
658
- this.nextNode.newOpinion = this.opinion;
659
- } else if (this.formType != 'readTransfer') {
660
- this.newOpinion = this.opinion;
661
- }
662
- },
663
- methods: {
664
- limitTimevalidate() {
665
- let validSate = true;
666
- this.$refs.nextNode.validate((valid) => {
667
- if (valid) {
668
- validSate = true;
669
- } else {
670
- validSate = false;
671
- }
672
- });
673
- return validSate;
674
- },
675
- checkCustomLimitTime(rule, value, callback) {
676
- if (!Number(value) || value.indexOf('.') != -1 || Number(value) < 0) {
677
- callback(new Error('请输入正确的天数'));
678
- this.nextNode.customLimitTime = '';
679
- } else {
680
- callback();
681
- }
682
- },
683
- handleChange() {
684
- this.isChangeMessage = true;
685
- },
686
- changeCustomLimitTime(val) {
687
- if (!Number(val) || val.indexOf('.') != -1 || Number(val) < 0) {
688
- this.$message.warning('请输入正确的天数');
689
- this.nextNode.customLimitTime = '';
690
- }
691
- },
692
- getUserInfo() {
693
- let mainConfig = util.getStorage('mainConfig');
694
- if (mainConfig) {
695
- this.userModel = JSON.parse(mainConfig).userModel;
696
- } else {
697
- util
698
- .ajax({ url: loginUserInfo })
699
- .then((res) => {
700
- const { status, data } = res;
701
- if (status == 'success') {
702
- this.userModel = data;
703
- } else {
704
- let msg = res.msg || '系统错误,请联系管理员!';
705
- this.$message.error(msg);
706
- }
707
- })
708
- .catch((err) => {
709
- if (err.message && err.message !== 'canceled') {
710
- this.$message.error(err.message);
711
- }
712
- });
713
- }
714
- },
715
- getIsShowNextUser(val) {
716
- if (
717
- val == 7 ||
718
- val == 8 ||
719
- val == 9 ||
720
- val == 10 ||
721
- val == 11 ||
722
- val == 12
723
- ) {
724
- this.isShowNextUser = false;
725
- //设置办理角色
726
- // $("#orgRoleCode").val(handleRoleId);
727
- if (val == 7 || val == 8) {
728
- this.nextUserTypes = ['department'];
729
- this.nextUserTabs = {
730
- department: {
731
- param: {
732
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
733
- }
734
- }
735
- };
736
- this.multiple = true;
737
- } else if (val == 9 || val == 10) {
738
- this.nextUserTypes = ['enterprise'];
739
- this.nextUserTabs = { enterprise: { param: { filid: 'other' } } };
740
- this.multiple = true;
741
- } else if (val == 11 || val == 12) {
742
- this.nextUserTypes = ['department', 'enterprise'];
743
- this.nextUserTabs = {
744
- enterprise: { param: { filid: 'other' } },
745
- department: {
746
- param: {
747
- filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
748
- }
749
- }
750
- };
751
- this.multiple = true;
752
- }
753
- }
754
- if (val == 7 || val == 9 || val == 11) {
755
- this.multiple = false;
756
- }
757
- },
758
- // 分阅是否多选
759
- isReadMultiple(nextReadUserSelectType) {
760
- if (nextReadUserSelectType == 1) {
761
- this.readMultiple = false;
762
- } else if (nextReadUserSelectType == 2) {
763
- this.readMultiple = true;
764
- } else if (nextReadUserSelectType == 3) {
765
- this.readMultiple = false;
766
- } else if (nextReadUserSelectType == 4) {
767
- this.readMultiple = true;
768
- } else if (nextReadUserSelectType == 5) {
769
- this.readMultiple = false;
770
- } else if (nextReadUserSelectType == 6) {
771
- this.readMultiple = true;
772
- }
773
- },
774
- changeSelectReadUser(val, type) {
775
- const { nextUser, mixList } = val;
776
- this.nextNode[type] = nextUser;
777
- if (type === 'presetReadUserId') {
778
- this.mixPresetList = mixList;
779
- } else {
780
- this.mixReadList = mixList;
781
- }
782
- },
783
- selecNext(val) {
784
- this.nextNode.nextUser = [];
785
- this.options = [];
786
- this.selectUserList = [];
787
- this.radioList = [];
788
- if (this.showBtn) {
789
- this.loading = true;
790
- } else {
791
- this.allLoading = util.loading(this.$loading, '加载中...');
792
- }
793
- this.nextNode.nodeInfo = this.operationList[val].list;
794
- if (this.nextNode.nodeInfo.length > 0) {
795
- this.nextNode.nextNode =
796
- this.defaultNextNode || this.nextNode.nodeInfo[0].nodeId;
797
- }
798
- this.getNodeInfos();
799
- },
800
- changeSelectUser(val, type) {
801
- const { nextUser, options, mixList } = val;
802
- this.nextNode[type] = nextUser;
803
- this.mixOrgIdList = mixList;
804
- },
805
- getNodeType() {
806
- util
807
- .ajax({
808
- url: findCodeValues,
809
- params: {
810
- ccCode: 'notification_type',
811
- userId: util.getStorage('userId')
812
- }
813
- })
814
- .then((res) => {
815
- const { status, data } = res;
816
- if (status === 'success') {
817
- this.nextNode.noticeList = data;
818
- }
819
- })
820
- .catch((err) => {
821
- if (this.showBtn) {
822
- this.loading = false;
823
- } else {
824
- this.allLoading.close();
825
- }
826
- if (err.message && err.message !== 'canceled') {
827
- this.$message.error(err.message);
828
- }
829
- });
830
- },
831
- //获取通知信息
832
- getMessage() {
833
- let params = {
834
- processDefinitionId: this.processDefinitionId,
835
- nodeId: this.nextNode.nextNode,
836
- businessId: this.id
837
- };
838
- if (!this.showBtn) {
839
- params.openMode = 'samepage';
840
- }
841
- util
842
- .ajax({ url: getNotificationMsg, params, methods: 'post' })
843
- .then((res) => {
844
- if (res.status === 'success') {
845
- if (!this.showBtn) {
846
- this.oldMessage = res.message;
847
- this.nextNode.noticeInfo = res.message.replace(
848
- '{title}',
849
- this.formTitle
850
- );
851
- } else {
852
- this.nextNode.noticeInfo = res.message;
853
- }
854
- }
855
- })
856
- .catch((err) => {
857
- if (this.showBtn) {
858
- this.loading = false;
859
- } else {
860
- this.allLoading.close();
861
- }
862
- if (err.message && err.message !== 'canceled') {
863
- this.$message.error(err.message);
864
- }
865
- });
866
- },
867
- // 提交表单
868
- subProcess(formName) {
869
- this.saveProcess(formName);
870
- },
871
- saveProcess(formName) {
872
- this.$refs[formName].validate((valid) => {
873
- if (valid) {
874
- const {
875
- nextNode,
876
- nextUser,
877
- noticeInfo,
878
- noticeType,
879
- handleExplain,
880
- presetReadUserId,
881
- nextReadUserId,
882
- nextOrgId,
883
- newOpinion,
884
- customLimitTime
885
- } = this.nextNode;
886
- // if (noticeType.length === 0) {
887
- // return this.$message.warning('请选择通知方式');
888
- // }
889
- if (this.isShowNextUser) {
890
- if (nextUser == '' || (this.multiple && nextUser.length == 0)) {
891
- return this.$message.warning('请选择下步办理人');
892
- }
893
- } else {
894
- if (nextOrgId == '' || (this.multiple && nextOrgId.length == 0)) {
895
- return this.$message.warning('请选择办理对象');
896
- }
897
- }
898
- if (this.showBtn) {
899
- this.loading = true;
900
- } else {
901
- this.allLoading = util.loading(this.$loading, '加载中...');
902
- }
903
- let newNextUser = [];
904
- if (this.multiple) {
905
- nextUser && nextUser.map((item) => newNextUser.push(item));
906
- }
907
- let newNoticeType = '';
908
- if (noticeType) {
909
- newNoticeType = noticeType.join(',');
910
- }
911
- let params = {
912
- processDefinitionId: this.processDefinitionId,
913
- nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
914
- nextNodeId: nextNode,
915
- businessId: this.businessId,
916
- notificationType: newNoticeType,
917
- userId: util.getStorage('userId'),
918
- notificationMsg: noticeInfo,
919
- customPresetUserJson: JSON.stringify(this.presetList),
920
- presetUserJson: JSON.stringify(this.presetUserJson),
921
- nextReadUserId: this.readMultiple
922
- ? this.mixReadList && this.mixReadList.join('|')
923
- : nextReadUserId,
924
- nextOrgId: !this.isShowNextUser
925
- ? this.multiple
926
- ? this.mixOrgIdList && this.mixOrgIdList.join('|')
927
- : nextOrgId
928
- : '',
929
- handleExplain: handleExplain,
930
- presetReadUserId:
931
- this.mixPresetList && this.mixPresetList.length > 0
932
- ? this.mixPresetList.join('|')
933
- : presetReadUserId.join(','),
934
- opinion: this.newOpinion || newOpinion
935
- };
936
- if (this.enableCustomLimitTimeSetting) {
937
- params.customLimitTime = customLimitTime;
938
- if (!customLimitTime) {
939
- this.$message.warning('请选择或输入限时办理的天数');
940
- this.nextNode.customLimitTime = '';
941
- return;
942
- } else if (
943
- !Number(customLimitTime) ||
944
- val.indexOf('.') != -1 ||
945
- Number(customLimitTime) < 0
946
- ) {
947
- this.$message.warning('请输入正确的天数');
948
- this.nextNode.customLimitTime = '';
949
- return;
950
- }
951
- }
952
- if (this.activeNames != '1') delete params.customPresetUserJson;
953
- if (this.isFreeStartFlow || this.formType === 'readTransfer') {
954
- let newParm = {};
955
- newParm.copyHistory = this.copyHistory === 'needCopyPendedHistory';
956
- newParm.startFlowParamJson = params;
957
- // newParm.startFlowParamJson.businessId = this.id; //this.id
958
- newParm.startFlowParamJson.taskExamineParam = {
959
- startFlowFirstNodeName: this.taskExamineParam
960
- };
961
- newParm.startFlowParamJson = JSON.stringify(
962
- newParm.startFlowParamJson
963
- );
964
- for (let key in this.taskParams) {
965
- if (Array.isArray(this.taskParams[key])) {
966
- this.taskParams[key] =
967
- this.taskParams[key].length > 0
968
- ? this.taskParams[key].join(',')
969
- : '';
970
- }
971
- }
972
-
973
- newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
974
- if (this.formType == 'readTransfer') {
975
- newParm.readTransferHandleStartFlowParamJson =
976
- JSON.stringify(params);
977
- newParm.taskReadEndParamJson = JSON.stringify(this.taskParams);
978
- delete newParm.copyHistory;
979
- delete newParm.startFlowParamJson;
980
- delete newParm.submitTaskParamJson;
981
- }
982
- params = newParm;
983
- }
984
- if (this.copyHistory && !this.isFreeStartFlow) {
985
- params.pendingId = this.pendingId;
986
- delete params.businessId;
987
- }
988
- util
989
- .ajax({
990
- url: this.isFreeStartFlow
991
- ? freeStartFlowWithSubmitTask
992
- : this.formType == 'readTransfer'
993
- ? startReadTransferHandleFlowWithTaskReadEnd
994
- : this.copyHistory
995
- ? freeStartFlow
996
- : register,
997
- method: 'post',
998
- data: params
999
- })
1000
- .then((res) => {
1001
- const { status, message } = res;
1002
- if (this.showBtn) {
1003
- this.loading = false;
1004
- } else {
1005
- this.allLoading.close();
1006
- }
1007
- if (status === 'success' || res.rCode == 0) {
1008
- this.quit(true);
1009
- this.simpleTips && this.$message.success('操作成功');
1010
- } else {
1011
- this.$message.error(message || '系统错误,请联系管理员!');
1012
- }
1013
- })
1014
- .catch((err) => {
1015
- if (this.showBtn) {
1016
- this.loading = false;
1017
- } else {
1018
- this.allLoading.close();
1019
- }
1020
- if (err.message && err.message !== 'canceled') {
1021
- this.$message.error(err.message);
1022
- }
1023
- });
1024
- } else {
1025
- return false;
1026
- }
1027
- });
1028
- },
1029
- getNodeInfos(nodeId, index) {
1030
- let params = {
1031
- processDefinitionId: this.processDefinitionId,
1032
- nextNodeId: nodeId ? nodeId : this.nextNode.nextNode,
1033
- businessId: this.id,
1034
- userId: util.getStorage('userId')
1035
- };
1036
- util
1037
- .ajax({ url: getNodeInfo, params })
1038
- .then((res) => {
1039
- const {
1040
- status,
1041
- message,
1042
- data: {
1043
- nextUserList,
1044
- nodeExtAttr,
1045
- countersignaturetypeText,
1046
- countersignaturetypeCode
1047
- }
1048
- } = res;
1049
- if (this.showBtn) {
1050
- this.loading = false;
1051
- } else {
1052
- this.allLoading.close();
1053
- }
1054
- if (status === 'success') {
1055
- this.isCurrentNodeForbiddenChangeCandidate =
1056
- nodeExtAttr.isCurrentNodeForbiddenChangeCandidate;
1057
- this.nextNode.userInfo = nextUserList;
1058
- this.countersignaturetypeCode = countersignaturetypeCode;
1059
- this.nextNode.countersignaturetypeText = countersignaturetypeText;
1060
- this.enableCustomLimitTimeSetting =
1061
- nodeExtAttr.enableCustomLimitTimeSetting == 1;
1062
- this.isTaskread = nodeExtAttr.isTaskread;
1063
- this.isHandleExplain = nodeExtAttr.isHandleExplain;
1064
- this.isCustomUser = nodeExtAttr.isCustomUser; //是否展示选人组件按钮
1065
- this.presetEdit = nodeExtAttr.presetEdit; //是否展示备选人
1066
- this.isDefSelectedObj = nodeExtAttr.isDefSelectedObj; //是否默认选中
1067
- if (
1068
- nodeExtAttr.userSelectionType == 7 ||
1069
- nodeExtAttr.userSelectionType == 8 ||
1070
- nodeExtAttr.userSelectionType == 9 ||
1071
- nodeExtAttr.userSelectionType == 10 ||
1072
- nodeExtAttr.userSelectionType == 11 ||
1073
- nodeExtAttr.userSelectionType == 12
1074
- ) {
1075
- this.getIsShowNextUser(
1076
- nodeExtAttr && nodeExtAttr.userSelectionType
1077
- );
1078
- } else {
1079
- const { multiple, params } = this.isMultiple(
1080
- nodeExtAttr.userSelectionType
1081
- );
1082
- this.multiple = multiple;
1083
- this.params = params;
1084
- }
1085
- // this.isReadMultiple(nodeExtAttr.userSelectionType);
1086
-
1087
- nextUserList.map((item) => {
1088
- if (
1089
- this.multiple &&
1090
- nodeExtAttr.isDefSelectedObj == 1 &&
1091
- nextUserList !== undefined
1092
- ) {
1093
- this.nextNode.nextUser.push(item.userId);
1094
- this.selectUserList.push({
1095
- showname: item.username,
1096
- showid: item.userId
1097
- });
1098
- }
1099
-
1100
- this.options.push({
1101
- showname: item.username,
1102
- showid: item.userId
1103
- });
1104
- });
1105
- if (this.multiple) {
1106
- this.nextNode.nextReadUserId = [];
1107
- } else {
1108
- this.nextNode.nextReadUserId = '';
1109
- }
1110
- if (
1111
- nextUserList.length > 0 &&
1112
- nodeExtAttr.isDefSelectedObj == 1 &&
1113
- !this.multiple
1114
- ) {
1115
- this.nextNode.nextUser = nextUserList[0].userId;
1116
- this.selectUserList.push({
1117
- showname: nextUserList[0].username,
1118
- showid: nextUserList[0].userId
1119
- });
1120
- }
1121
- this.radioList = this.options;
1122
- } else {
1123
- this.$message.error(message || '系统错误,请联系管理员!');
1124
- }
1125
- nodeId && this.$refs.selectUser[index].changeInfo();
1126
- })
1127
- .catch((err) => {
1128
- if (this.showBtn) {
1129
- this.loading = false;
1130
- } else {
1131
- this.allLoading.close();
1132
- }
1133
- if (err.message && err.message !== 'canceled') {
1134
- this.$message.error(err.message);
1135
- }
1136
- });
1137
- },
1138
- changeSel(val) {
1139
- this.nextNode.nextUser = [];
1140
- this.options = [];
1141
- this.selectUserList = [];
1142
- this.radioList = [];
1143
- if (this.showBtn) {
1144
- this.loading = true;
1145
- } else {
1146
- this.allLoading = util.loading(this.$loading, '加载中...');
1147
- }
1148
- this.getNodeInfos();
1149
- },
1150
- // 取消
1151
- quit(val) {
1152
- if (val === true) return this.$emit('cancel', val);
1153
- this.$emit('cancel', false);
1154
- },
1155
- getFind() {
1156
- util
1157
- .ajax({
1158
- url: findSysCodes
1159
- })
1160
- .then((res) => {
1161
- const { status, message } = res;
1162
- if (status === 'success') {
1163
- this.nextNode.noticeType = message.split(',');
1164
- let arr = [];
1165
- this.nextNode.noticeList.map((item) => {
1166
- this.nextNode.noticeType.map((x) => {
1167
- if (x == item.cciValue) {
1168
- arr.push(x);
1169
- }
1170
- });
1171
- });
1172
- this.nextNode.noticeType = arr;
1173
- } else {
1174
- this.$message.error(message || '系统错误,请联系管理员!');
1175
- }
1176
- })
1177
- .catch((err) => {
1178
- if (this.showBtn) {
1179
- this.loading = false;
1180
- } else {
1181
- this.allLoading.close();
1182
- }
1183
- if (err.message && err.message !== 'canceled') {
1184
- this.$message.error(err.message);
1185
- }
1186
- });
1187
- },
1188
- /**
1189
- * isMultiple
1190
- * @desc:是否多选
1191
- * @author liufan
1192
- * @date 2022年9月13日
1193
- **/
1194
- isMultiple(val, choiceOrgId, choiceDeptId, pOrgId) {
1195
- let multiple = false;
1196
- let params = {};
1197
- if (val == 2 || val == 4 || val == 6 || val == 16 || val == 12) {
1198
- multiple = true;
1199
- }
1200
- if (val == 1 || val == 2 || val == 5) {
1201
- params.filid = this.userModel.orgId;
1202
- params.only_filid = true;
1203
- if (choiceOrgId) {
1204
- params.filid = choiceOrgId;
1205
- }
1206
- }
1207
- if (val == 5 || val == 6) {
1208
- params.filid = this.userModel.orgId;
1209
- params.deptid = this.userModel.orgId;
1210
- if (choiceDeptId) {
1211
- params.deptid = choiceDeptId;
1212
- }
1213
- if (choiceOrgId) {
1214
- params.filid = choiceOrgId;
1215
- }
1216
- }
1217
- if (val == 15 || val == 16) {
1218
- params.filid = this.userModel.orgId;
1219
- if (pOrgId) {
1220
- params.filid = pOrgId;
1221
- }
1222
- }
1223
- return { multiple, params };
1224
- },
1225
- getStartFlow(processId) {
1226
- if (!processId) {
1227
- return false;
1228
- }
1229
- if (this.showBtn) {
1230
- this.loading = true;
1231
- } else {
1232
- this.allLoading = util.loading(this.$loading, '加载中...');
1233
- }
1234
- this.businessId = this.id;
1235
- let params = {
1236
- processDefinitionId: processId, // processId || this.processDefinitionId,
1237
- userId: util.getStorage('userId'),
1238
- businessId: this.businessId
1239
- };
1240
- // 获取节点
1241
- util
1242
- .ajax({ url: toStartFlow, params })
1243
- .then((res) => {
1244
- //pc接口返回数据处理
1245
- const { status, message, data } = res;
1246
- if (status == 'success') {
1247
- data.nodeInfoMap.nodeExtAttr.submitTipsMsg &&
1248
- this.$confirm(
1249
- data.nodeInfoMap.nodeExtAttr.submitTipsMsg,
1250
- '提示',
1251
- {
1252
- confirmButtonText: '确定',
1253
- cancelButtonText: '取消',
1254
- type: 'warning'
1255
- }
1256
- )
1257
- .then(() => {})
1258
- .catch(() => {
1259
- this.quit();
1260
- });
1261
- data.nextNodeCheckType &&
1262
- (this.nextNodeCheckType = data.nextNodeCheckType);
1263
- data.nextOperateCheckType &&
1264
- (this.nextOperateCheckType = data.nextOperateCheckType);
1265
- this.customPresetHintMessage = data.customPresetHintMessage;
1266
- this.readOnlyNotificationType = data.readOnlyNotificationType;
1267
- this.notificationMessageReadOnly =
1268
- data.notificationMessageReadOnly == 'true';
1269
- this.nextNode.nodeInfo = data.nextNodeList;
1270
- this.nextNode.nextNode = data.nextNodeList[0].nodeId;
1271
- this.isPreset = data.isPreset;
1272
- this.isHideDefaultOperation =
1273
- data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation;
1274
- this.defaultNextNode = data.nodeInfoMap.nodeExtAttr.defaultNextNode;
1275
- this.isChooseNextNode =
1276
- data.nodeInfoMap.nodeExtAttr.isChooseNextNode;
1277
- this.isCdjxjTaskHandle = data.isCdjxjTaskHandle;
1278
- if (this.isChooseNextNode == 1) {
1279
- this.operationList = [
1280
- { key: 0, value: '默认', list: [] },
1281
- { key: 1, value: '自定义', list: [] }
1282
- ];
1283
- let arr = [];
1284
- for (let key in data.taskNodeMap) {
1285
- arr.push({ nodeName: data.taskNodeMap[key], nodeId: key });
1286
- }
1287
- this.operationList[0].list = data.nextNodeList;
1288
- this.operationList[1].list = arr;
1289
- if (this.isHideDefaultOperation != 1) {
1290
- this.nextNode.nextOperate = 0;
1291
- this.nextNode.nodeInfo = this.operationList[0].list;
1292
- if (this.nextNode.nodeInfo.length > 0) {
1293
- let defaultNodeData = data.nextNodeList.filter(
1294
- (x) => x.nodeId == this.defaultNextNode
1295
- );
1296
- this.nextNode.nextNode =
1297
- defaultNodeData.length > 0
1298
- ? this.defaultNextNode
1299
- : data.nextNodeList[0].nodeId;
1300
- }
1301
- } else if (
1302
- data.nodeInfoMap.nodeExtAttr.defaultNextOperate == 1 ||
1303
- data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation == 1
1304
- ) {
1305
- // this.nextNode.nodeInfo = data.nextNodeList
1306
- this.nextNode.nextOperate = 1;
1307
- this.nextNode.nodeInfo = this.operationList[1].list;
1308
- if (this.nextNode.nodeInfo.length > 0) {
1309
- let defaultNodeData = data.nextNodeList.filter(
1310
- (x) => x.nodeId == this.defaultNextNode
1311
- );
1312
- this.nextNode.nextNode =
1313
- defaultNodeData.length > 0
1314
- ? this.defaultNextNode
1315
- : data.nextNodeList[0].nodeId;
1316
- }
1317
- }
1318
- }
1319
- this.isCustomPreset = data.isCustomPreset;
1320
- this.presetTaskNodeKeyStr = data.presetTaskNodeKeyStr;
1321
- this.presetTaskNodeMap = data.presetTaskNodeMap;
1322
- this.isSinglePage = data.taskExamine.isSinglePage;
1323
- this.isSinglePage &&
1324
- (this.nextNode.opinion = data.taskExamine.opinion);
1325
- // this.nextNode.noticeInfo = data.taskExamine.notificationMsg;
1326
- this.nextNode.nodeName = data.taskExamine.nodeName;
1327
- this.canPresetRead = data.canPresetRead;
1328
- if (data.canPresetRead) {
1329
- let ids =
1330
- data.nodeInfoMap.nodeExtAttr.presetReadCandinateIds.split(',');
1331
- let names =
1332
- data.nodeInfoMap.nodeExtAttr.presetReadCandinateNames.split(
1333
- ','
1334
- );
1335
- ids.map((item, index) => {
1336
- this.presetReadUserId.push({
1337
- showid: item,
1338
- showname: names[index]
1339
- });
1340
- this.selectPresetUserList.push({
1341
- showid: item,
1342
- showname: names[index]
1343
- });
1344
- this.nextNode.presetReadUserId.push(item);
1345
- });
1346
- }
1347
- this.getNodeInfos();
1348
- // this.getPresetFlowInfo();
1349
- this.isCustomPreset &&
1350
- this.$refs.customPreset.getPresetFlowInfo(this.nextNode.nextNode);
1351
- this.getFind();
1352
- this.getMessage();
1353
- } else {
1354
- this.$message.error(message || '系统错误,请联系管理员!');
1355
- }
1356
- })
1357
- .catch((err) => {
1358
- if (this.showBtn) {
1359
- this.loading = false;
1360
- } else {
1361
- this.allLoading.close();
1362
- }
1363
- if (err.message && err.message !== 'canceled') {
1364
- this.$message.error(err.message);
1365
- }
1366
- });
1367
- }
1368
- }
1369
- };
1370
- </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:${
19
+ showBtn ? '430px' : 'auto'
20
+ }; overflow-y: auto; margin-bottom: 10px`"
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
+ :isCustomUser="isCustomUser"
129
+ :options="options"
130
+ :presetEdit="presetEdit"
131
+ :isDefSelectedObj="isDefSelectedObj"
132
+ :selectUserList="selectUserList"
133
+ @change="changeSelectUser"
134
+ :types="nextUserTypes"
135
+ :params="params"
136
+ />
137
+ </el-form-item> -->
138
+ <el-form-item
139
+ :prop="isShowNextUser ? 'nextUser' : 'nextOrgId'"
140
+ :label="isShowNextUser ? '下步办理人' : '办理对象'"
141
+ >
142
+ <SelectUser
143
+ :nextUser="isShowNextUser ? nextNode.nextUser : nextNode.nextOrgId"
144
+ :radioList="radioList"
145
+ :multiple="multiple"
146
+ :isCustomUser="!isShowNextUser ? 1 : isCustomUser"
147
+ :isCurrentNodeForbiddenChangeCandidate="isCurrentNodeForbiddenChangeCandidate"
148
+ :options="options"
149
+ :presetEdit="presetEdit"
150
+ :mix="multiple"
151
+ :isDefSelectedObj="isDefSelectedObj"
152
+ :selectUserList="selectUserList"
153
+ @change="
154
+ changeSelectUser(
155
+ $event,
156
+ isShowNextUser ? 'nextUser' : 'nextOrgId'
157
+ )
158
+ "
159
+ :types="
160
+ !isShowNextUser
161
+ ? nextUserTypes
162
+ : isCdjxjTaskHandle != 'true'
163
+ ? ['employee', 'persongroup']
164
+ : ['employee']
165
+ "
166
+ :params="isShowNextUser ? params : {}"
167
+ :tabs="nextUserTabs"
168
+ />
169
+ </el-form-item>
170
+ <el-form-item
171
+ prop="nextReadUserId"
172
+ v-if="isTaskread == 1"
173
+ label="
174
+ 分阅用户
175
+ "
176
+ >
177
+ <SelectUser
178
+ :nextUser="nextNode.nextReadUserId"
179
+ :multiple="true"
180
+ :selectUserList="selectReadUserList"
181
+ :options="userOptions"
182
+ title="分阅用户"
183
+ :mix="true"
184
+ :types="types"
185
+ @change="changeSelectReadUser($event, 'nextReadUserId')"
186
+ :tabs="tabs"
187
+ />
188
+ </el-form-item>
189
+ <el-form-item
190
+ prop="presetReadUserId"
191
+ v-if="canPresetRead"
192
+ label="
193
+ 自动分阅
194
+ "
195
+ >
196
+ <SelectUser
197
+ :nextUser="nextNode.presetReadUserId"
198
+ :multiple="true"
199
+ :selectUserList="selectPresetUserList"
200
+ :options="presetOptions"
201
+ title="分阅用户"
202
+ :radioList="presetReadUserId"
203
+ :presetEdit="1"
204
+ :mix="true"
205
+ :types="types"
206
+ @change="changeSelectReadUser($event, 'presetReadUserId')"
207
+ :tabs="tabs"
208
+ />
209
+ </el-form-item>
210
+ <el-form-item
211
+ v-if="enableCustomLimitTimeSetting"
212
+ prop="customLimitTime"
213
+ label="限时办理"
214
+ :rules="[
215
+ {
216
+ required: enableCustomLimitTimeSetting,
217
+ message: showCustomLimitTimeText
218
+ ? '请输入限时办理天数'
219
+ : '请选择限时办理天数',
220
+ trigger: 'blur'
221
+ },
222
+ {
223
+ required: enableCustomLimitTimeSetting,
224
+ validator: checkCustomLimitTime,
225
+ trigger: 'blur'
226
+ }
227
+ ]"
228
+ >
229
+ <es-select
230
+ v-model="nextNode.customLimitTimeText"
231
+ placeholder="请选择"
232
+ @change="handleChangeTime"
233
+ :style="`width: ${showBtn?'20%' : '50%'} !important; display: inline-block;`"
234
+ sysCode="bpm_custom_limit_time"
235
+ ></es-select>
236
+ <el-input
237
+ v-model="nextNode.customLimitTime"
238
+ style="width: 50%; display: inline-block;"
239
+ placeholder="请输入限时办理的天数"
240
+ class="input-with-select custom-limit-time"
241
+ @change="changeCustomLimitTime"
242
+ >
243
+ </el-input>
244
+
245
+ </el-form-item>
246
+ <el-form-item
247
+ v-if="isHandleExplain == 1"
248
+ prop="handleExplain"
249
+ label="办理说明"
250
+ >
251
+ <el-input
252
+ placeholder="请输入办理说明"
253
+ v-model="nextNode.handleExplain"
254
+ />
255
+ </el-form-item>
256
+ <el-form-item
257
+ prop="noticeType"
258
+ label="通知方式"
259
+ v-show="showBtn && nextNode.noticeList.length > 0"
260
+ >
261
+ <el-checkbox-group v-model="nextNode.noticeType">
262
+ <el-checkbox
263
+ v-for="item of nextNode.noticeList"
264
+ :key="item.cciValue"
265
+ :label="item.cciValue"
266
+ :disabled="
267
+ readOnlyNotificationType
268
+ ? readOnlyNotificationType.indexOf(item.cciValue) != -1
269
+ : false
270
+ "
271
+ >
272
+ {{ item.shortName }}
273
+ </el-checkbox>
274
+ </el-checkbox-group>
275
+ </el-form-item>
276
+ <el-form-item
277
+ v-show="nextNode.noticeType.length != 0 && showBtn"
278
+ prop="nextNode"
279
+ label="通知消息"
280
+ >
281
+ <es-input
282
+ style="
283
+ border-color: #ccc;
284
+ padding: 5px;
285
+ border-radius: 5px;
286
+ font-size: 13px;
287
+ "
288
+ type="textarea"
289
+ v-model="nextNode.noticeInfo"
290
+ :readonly="notificationMessageReadOnly"
291
+ />
292
+ </el-form-item>
293
+ <CustomPreset
294
+ v-show="isCustomPreset"
295
+ ref="customPreset"
296
+ @changeCustom="
297
+ (data) => {
298
+ presetList = data;
299
+ }
300
+ "
301
+ :customPresetHintMessage="customPresetHintMessage"
302
+ @changeActiveNames="(val) => (activeNames = val)"
303
+ @loadingEnd="loading = false"
304
+ @loadingStart="loading = true"
305
+ :nextNode="nextNode.nextNode"
306
+ :id="id"
307
+ :processDefinitionId="processDefinitionId"
308
+ />
309
+ <Preset
310
+ v-show="isPreset"
311
+ @changePreset="
312
+ (data) => {
313
+ presetUserJson = data;
314
+ }
315
+ "
316
+ @loadingEnd="loading = false"
317
+ @loadingStart="loading = true"
318
+ :customPresetHintMessage="customPresetHintMessage"
319
+ :nodeId="nextNode.nextNode"
320
+ :businessId="id"
321
+ :processDefinitionId="processDefinitionId"
322
+ :presetTaskNodeMap="presetTaskNodeMap"
323
+ :presetTaskNodeKeyStr="presetTaskNodeKeyStr"
324
+ />
325
+ </div>
326
+ <el-form-item style="margin-bottom: 0px" v-show="showBtn">
327
+ <div style="text-align: right">
328
+ <el-button
329
+ type="primary"
330
+ size="small"
331
+ @click="subProcess('nextNode')"
332
+ >
333
+ 确认
334
+ </el-button>
335
+ <el-button size="small" @click="quit"> 取消 </el-button>
336
+ </div>
337
+ </el-form-item>
338
+ </el-form>
339
+ <div
340
+ v-if="!showBtn && nextNode.noticeList.length > 0"
341
+ style="padding: 5px; background: #fff"
342
+ >
343
+ <div class="news" @click="showNews = !showNews">
344
+ <span class="news-item">消息通知</span>
345
+ <span :class="showNews ? 'show' : 'sj'"></span>
346
+ </div>
347
+ <div v-if="showNews" ref="messagebox" style="transition: 1s">
348
+ <el-checkbox-group v-model="nextNode.noticeType">
349
+ <el-checkbox
350
+ v-for="item of nextNode.noticeList"
351
+ :key="item.cciValue"
352
+ :label="item.cciValue"
353
+ :disabled="
354
+ readOnlyNotificationType
355
+ ? readOnlyNotificationType.indexOf(item.cciValue) != -1
356
+ : false
357
+ "
358
+ >
359
+ {{ item.shortName }}
360
+ </el-checkbox>
361
+ </el-checkbox-group>
362
+ <es-input
363
+ style="
364
+ border-color: #ccc;
365
+ padding: 5px;
366
+ border-radius: 5px;
367
+ font-size: 13px;
368
+ "
369
+ autosize
370
+ v-show="showNews"
371
+ type="textarea"
372
+ v-model="nextNode.noticeInfo"
373
+ @change="handleChange"
374
+ :readonly="notificationMessageReadOnly"
375
+ />
376
+ </div>
377
+ </div>
378
+ </div>
379
+ </template>
380
+
381
+ <script>
382
+ import {
383
+ toStartFlow,
384
+ getNodeInfo,
385
+ findSysCodes,
386
+ getNotificationMsg,
387
+ findCodeValues,
388
+ loginUserInfo,
389
+ register,
390
+ freeStartFlow,
391
+ freeStartFlowWithSubmitTask,
392
+ startReadTransferHandleFlowWithTaskReadEnd
393
+ } from 'eoss-ui/src/config/api';
394
+ import util from 'eoss-ui/src/utils/util';
395
+ import SelectUser from './selectUser.vue';
396
+ import CommonOpinions from './component/CommonOpinions.vue';
397
+ import CustomPreset from './component/CustomPreset.vue';
398
+ import Preset from './component/Preset.vue';
399
+ export default {
400
+ name: 'ProcessForm',
401
+
402
+ components: {
403
+ [Option.name]: Option,
404
+ [SelectUser.name]: SelectUser,
405
+ [CustomPreset.name]: CustomPreset,
406
+ [CommonOpinions.name]: CommonOpinions,
407
+ Preset
408
+ },
409
+ props: {
410
+ processDefinitionId: {
411
+ type: String,
412
+ default: ''
413
+ },
414
+ copyHistory: {
415
+ type: String,
416
+ default: ''
417
+ },
418
+ simpleTips: {
419
+ type: Boolean,
420
+ default: true
421
+ },
422
+ formType: {
423
+ type: String,
424
+ default: 'freeStart'
425
+ },
426
+ id: {
427
+ type: String,
428
+ default: ''
429
+ },
430
+ pendingId: {
431
+ type: String,
432
+ default: ''
433
+ },
434
+ opinion: {
435
+ type: String,
436
+ default: ''
437
+ },
438
+ isFreeStartFlow: {
439
+ type: Boolean,
440
+ default: false
441
+ },
442
+ taskParams: {
443
+ type: Object,
444
+ default: () => {}
445
+ },
446
+ taskExamineParam: {
447
+ type: String,
448
+ default: ''
449
+ },
450
+ labelPosition: {
451
+ type: String,
452
+ default: 'left'
453
+ },
454
+ formTitle: {
455
+ type: String,
456
+ default: ''
457
+ },
458
+ showBtn: { type: Boolean, default: true },
459
+ messageType: {
460
+ type: Array,
461
+ default: () => []
462
+ },
463
+ urgencyLevel: {
464
+ type: [Number, String],
465
+ default: ''
466
+ },
467
+ keyCount: {
468
+ type: [Number, String],
469
+ default: 0
470
+ }
471
+ },
472
+ data() {
473
+ return {
474
+ loading: false,
475
+ isCustomUser: 0,
476
+ isCurrentNodeForbiddenChangeCandidate:0,
477
+ allLoading: null,
478
+ selectUser: false,
479
+ multiple: false,
480
+ readMultiple: true,
481
+ customPresetHintMessage: '', //流程预设标题
482
+ nextNodeCheckType: 'select',
483
+ nextOperateCheckType: 'select',
484
+ showNews: false, // 是否展示通知信息
485
+ notificationMessageReadOnly: false,
486
+ isChangeMessage: false,
487
+ readOnlyNotificationType: '',
488
+ show: true,
489
+ enableCustomLimitTimeSetting: false,
490
+ radioList: [],
491
+ showCustomLimitTimeText: false,
492
+ activeNames: '',
493
+ selectUserList: [],
494
+ defaultNextNode: '',
495
+ presetUserJson: [],
496
+ businessId: '',
497
+ isTaskread: 0, //是否显示分阅用户
498
+ isHandleExplain: 0, //是否展示办理说明
499
+ options: [],
500
+ presetList: [],
501
+ presetReadUserId: [], //自动分阅
502
+ canPresetRead: false, //是否展示自动分阅
503
+ nextUserTypes: ['employee', 'persongroup'],
504
+ isCustomPreset: false, //是否展示预设节点
505
+ isPreset: false, //是否展示预设办理人
506
+ isSinglePage: false,
507
+ presetEdit: 0,
508
+ isDefSelectedObj: 0,
509
+ isChooseNextNode: 0,
510
+ isHideDefaultOperation: 0,
511
+ countersignaturetypeCode: 0,
512
+ presetTaskNodeKeyStr: '', //预设办理人顺序
513
+ presetTaskNodeMap: {}, //预设办理人
514
+ params: {
515
+ filid: 'all', //选择范围(my:本单位/ "" or all:全部)
516
+ selectmix: 'true1',
517
+ deptid: '' //指定部门(my:本部门)
518
+ },
519
+ newOpinion: '',
520
+ operationList: [],
521
+ tabs: {
522
+ employee: {
523
+ param: {
524
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId,
525
+ name: '本单位用户'
526
+ }
527
+ },
528
+ department: {
529
+ param: {
530
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
531
+ }
532
+ }
533
+ },
534
+ userModel: {},
535
+ nextUserTabs: {},
536
+ selectPresetUserList: [],
537
+ presetOptions: [],
538
+ selectReadUserList: [],
539
+ userOptions: [],
540
+ mixReadList: [],
541
+ mixPresetList: [],
542
+ isCdjxjTaskHandle: '',
543
+ isShowNextUser: true,
544
+ oldMessage: '',
545
+ mixOrgIdList: [], //办理对象混选
546
+ nextNode: {
547
+ nodeName: '',
548
+ customLimitTime: '',
549
+ customLimitTimeText: '',
550
+ newOpinion: '',
551
+ countersignaturetypeText: '',
552
+ nextNode: '',
553
+ nextReadUserId: [],
554
+ nextOrgId: [],
555
+ noticeType: [],
556
+ nextOperate: '',
557
+ nextUser: [],
558
+ presetReadUserId: [], //自动分阅
559
+ noticeInfo: '',
560
+ nodeInfo: [],
561
+ userInfo: [],
562
+ handleExplain: '',
563
+ noticeList: [],
564
+ msgTypeCount: 0
565
+ }
566
+ };
567
+ },
568
+ watch: {
569
+ messageType: {
570
+ handler(val) {
571
+ if (this.urgencyLevel) {
572
+ this.nextNode.noticeList = val;
573
+ let arr = [];
574
+ this.nextNode.noticeList.map((item) => {
575
+ this.nextNode.noticeType.map((x) => {
576
+ if (x == item.cciValue) {
577
+ arr.push(x);
578
+ }
579
+ });
580
+ });
581
+ this.nextNode.noticeType = arr;
582
+ } else {
583
+ this.msgTypeCount++;
584
+ }
585
+ }
586
+ },
587
+ processDefinitionId(val) {
588
+ Object.assign(this.$data, this.$options.data());
589
+ this.getUserInfo();
590
+ this.getNodeType();
591
+ this.getStartFlow(val);
592
+ if (this.copyHistory) {
593
+ this.nextNode.newOpinion = this.opinion;
594
+ } else if (this.formType != 'readTransfer') {
595
+ this.newOpinion = this.opinion;
596
+ }
597
+ // this.getStartFlow(val);
598
+ },
599
+ opinion(val) {
600
+ this.newOpinion = this.opinion;
601
+ },
602
+ formTitle: {
603
+ handler(val) {
604
+ if (!this.showBtn && !this.isChangeMessage) {
605
+ this.nextNode.noticeInfo = this.oldMessage.replace('{title}', val);
606
+ }
607
+ },
608
+ deep: true,
609
+ immediate: true
610
+ }
611
+ },
612
+ computed: {
613
+ rules() {
614
+ return {
615
+ customLimitTime: [
616
+ {
617
+ required: this.enableCustomLimitTimeSetting,
618
+ message: this.showCustomLimitTimeText
619
+ ? '请输入限时办理天数'
620
+ : '请选择限时办理天数',
621
+ trigger: 'blur'
622
+ },
623
+ {
624
+ required: this.enableCustomLimitTimeSetting,
625
+ validator: this.checkCustomLimitTime,
626
+ trigger: 'blur'
627
+ }
628
+ ]
629
+ };
630
+ },
631
+ types() {
632
+ if (this.isCdjxjTaskHandle == 'true') {
633
+ return ['employee', 'enterprise', 'department'];
634
+ } else {
635
+ return ['employee', 'enterprise', 'department', 'persongroup'];
636
+ }
637
+ }
638
+ },
639
+ created() {
640
+ this.getUserInfo();
641
+ },
642
+ mounted() {
643
+ if (!this.urgencyLevel) {
644
+ this.getNodeType();
645
+ }
646
+ this.getStartFlow(this.processDefinitionId);
647
+ if (this.copyHistory) {
648
+ this.nextNode.newOpinion = this.opinion;
649
+ } else if (this.formType != 'readTransfer') {
650
+ this.newOpinion = this.opinion;
651
+ }
652
+ },
653
+ methods: {
654
+ handleChangeTime(val){
655
+ this.nextNode.customLimitTime = val;
656
+ },
657
+ limitTimevalidate() {
658
+ let validSate = true;
659
+ this.$refs.nextNode.validate((valid) => {
660
+ if (valid) {
661
+ validSate = true;
662
+ } else {
663
+ validSate = false;
664
+ }
665
+ });
666
+ return validSate;
667
+ },
668
+ checkCustomLimitTime(rule, value, callback) {
669
+ if (!Number(value) || value.indexOf('.') != -1 || Number(value) < 0) {
670
+ callback(new Error('请输入正确的天数'));
671
+ this.nextNode.customLimitTime = '';
672
+ } else {
673
+ callback();
674
+ }
675
+ },
676
+ handleChange() {
677
+ this.isChangeMessage = true;
678
+ },
679
+ changeCustomLimitTime(val) {
680
+ if (!Number(val) || val.indexOf('.') != -1 || Number(val) < 0) {
681
+ this.$message.warning('请输入正确的天数');
682
+ this.nextNode.customLimitTime = '';
683
+ }
684
+ },
685
+ getUserInfo() {
686
+ let mainConfig = util.getStorage('mainConfig');
687
+ if (mainConfig) {
688
+ this.userModel = JSON.parse(mainConfig).userModel;
689
+ } else {
690
+ util
691
+ .ajax({ url: loginUserInfo })
692
+ .then((res) => {
693
+ const { status, data } = res;
694
+ if (status == 'success') {
695
+ this.userModel = data;
696
+ } else {
697
+ let msg = res.msg || '系统错误,请联系管理员!';
698
+ this.$message.error(msg);
699
+ }
700
+ })
701
+ .catch((err) => {
702
+ if (err.message && err.message !== 'canceled') {
703
+ this.$message.error(err.message);
704
+ }
705
+ });
706
+ }
707
+ },
708
+ getIsShowNextUser(val) {
709
+ if (
710
+ val == 7 ||
711
+ val == 8 ||
712
+ val == 9 ||
713
+ val == 10 ||
714
+ val == 11 ||
715
+ val == 12
716
+ ) {
717
+ this.isShowNextUser = false;
718
+ //设置办理角色
719
+ // $("#orgRoleCode").val(handleRoleId);
720
+ if (val == 7 || val == 8) {
721
+ this.nextUserTypes = ['department'];
722
+ this.nextUserTabs = {
723
+ department: {
724
+ param: {
725
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
726
+ }
727
+ }
728
+ };
729
+ this.multiple = true;
730
+ } else if (val == 9 || val == 10) {
731
+ this.nextUserTypes = ['enterprise'];
732
+ this.nextUserTabs = { enterprise: { param: { filid: 'other' } } };
733
+ this.multiple = true;
734
+ } else if (val == 11 || val == 12) {
735
+ this.nextUserTypes = ['department', 'enterprise'];
736
+ this.nextUserTabs = {
737
+ enterprise: { param: { filid: 'other' } },
738
+ department: {
739
+ param: {
740
+ filid: JSON.parse(util.getStorage('mainConfig')).userModel.orgId
741
+ }
742
+ }
743
+ };
744
+ this.multiple = true;
745
+ }
746
+ }
747
+ if (val == 7 || val == 9 || val == 11) {
748
+ this.multiple = false;
749
+ }
750
+ },
751
+ // 分阅是否多选
752
+ isReadMultiple(nextReadUserSelectType) {
753
+ if (nextReadUserSelectType == 1) {
754
+ this.readMultiple = false;
755
+ } else if (nextReadUserSelectType == 2) {
756
+ this.readMultiple = true;
757
+ } else if (nextReadUserSelectType == 3) {
758
+ this.readMultiple = false;
759
+ } else if (nextReadUserSelectType == 4) {
760
+ this.readMultiple = true;
761
+ } else if (nextReadUserSelectType == 5) {
762
+ this.readMultiple = false;
763
+ } else if (nextReadUserSelectType == 6) {
764
+ this.readMultiple = true;
765
+ }
766
+ },
767
+ changeSelectReadUser(val, type) {
768
+ const { nextUser, mixList } = val;
769
+ this.nextNode[type] = nextUser;
770
+ if (type === 'presetReadUserId') {
771
+ this.mixPresetList = mixList;
772
+ } else {
773
+ this.mixReadList = mixList;
774
+ }
775
+ },
776
+ selecNext(val) {
777
+ this.nextNode.nextUser = [];
778
+ this.options = [];
779
+ this.selectUserList = [];
780
+ this.radioList = [];
781
+ if (this.showBtn) {
782
+ this.loading = true;
783
+ } else {
784
+ this.allLoading = util.loading(this.$loading, '加载中...');
785
+ }
786
+ this.nextNode.nodeInfo = this.operationList[val].list;
787
+ if (this.nextNode.nodeInfo.length > 0) {
788
+ this.nextNode.nextNode =
789
+ this.defaultNextNode || this.nextNode.nodeInfo[0].nodeId;
790
+ }
791
+ this.getNodeInfos();
792
+ },
793
+ changeSelectUser(val, type) {
794
+ const { nextUser, options, mixList } = val;
795
+ this.nextNode[type] = nextUser;
796
+ this.mixOrgIdList = mixList;
797
+ },
798
+ getNodeType() {
799
+ util
800
+ .ajax({
801
+ url: findCodeValues,
802
+ params: {
803
+ ccCode: 'notification_type',
804
+ userId: util.getStorage('userId')
805
+ }
806
+ })
807
+ .then((res) => {
808
+ const { status, data } = res;
809
+ if (status === 'success') {
810
+ this.nextNode.noticeList = data;
811
+ }
812
+ })
813
+ .catch((err) => {
814
+ if (this.showBtn) {
815
+ this.loading = false;
816
+ } else {
817
+ this.allLoading.close();
818
+ }
819
+ if (err.message && err.message !== 'canceled') {
820
+ this.$message.error(err.message);
821
+ }
822
+ });
823
+ },
824
+ //获取通知信息
825
+ getMessage() {
826
+ let params = {
827
+ processDefinitionId: this.processDefinitionId,
828
+ nodeId: this.nextNode.nextNode,
829
+ businessId: this.id
830
+ };
831
+ if (!this.showBtn) {
832
+ params.openMode = 'samepage';
833
+ }
834
+ util
835
+ .ajax({ url: getNotificationMsg, params, methods: 'post' })
836
+ .then((res) => {
837
+ if (res.status === 'success') {
838
+ if (!this.showBtn) {
839
+ this.oldMessage = res.message;
840
+ this.nextNode.noticeInfo = res.message.replace(
841
+ '{title}',
842
+ this.formTitle
843
+ );
844
+ } else {
845
+ this.nextNode.noticeInfo = res.message;
846
+ }
847
+ }
848
+ })
849
+ .catch((err) => {
850
+ if (this.showBtn) {
851
+ this.loading = false;
852
+ } else {
853
+ this.allLoading.close();
854
+ }
855
+ if (err.message && err.message !== 'canceled') {
856
+ this.$message.error(err.message);
857
+ }
858
+ });
859
+ },
860
+ // 提交表单
861
+ subProcess(formName) {
862
+ this.saveProcess(formName);
863
+ },
864
+ saveProcess(formName) {
865
+ this.$refs[formName].validate((valid) => {
866
+ if (valid) {
867
+ const {
868
+ nextNode,
869
+ nextUser,
870
+ noticeInfo,
871
+ noticeType,
872
+ handleExplain,
873
+ presetReadUserId,
874
+ nextReadUserId,
875
+ nextOrgId,
876
+ newOpinion,
877
+ customLimitTime
878
+ } = this.nextNode;
879
+ // if (noticeType.length === 0) {
880
+ // return this.$message.warning('请选择通知方式');
881
+ // }
882
+ if (this.isShowNextUser) {
883
+ if (nextUser == '' || (this.multiple && nextUser.length == 0)) {
884
+ return this.$message.warning('请选择下步办理人');
885
+ }
886
+ } else {
887
+ if (nextOrgId == '' || (this.multiple && nextOrgId.length == 0)) {
888
+ return this.$message.warning('请选择办理对象');
889
+ }
890
+ }
891
+ if (this.showBtn) {
892
+ this.loading = true;
893
+ } else {
894
+ this.allLoading = util.loading(this.$loading, '加载中...');
895
+ }
896
+ let newNextUser = [];
897
+ if (this.multiple) {
898
+ nextUser && nextUser.map((item) => newNextUser.push(item));
899
+ }
900
+ let newNoticeType = '';
901
+ if (noticeType) {
902
+ newNoticeType = noticeType.join(',');
903
+ }
904
+ let params = {
905
+ processDefinitionId: this.processDefinitionId,
906
+ nextUserId: this.multiple ? newNextUser.join(',') : nextUser,
907
+ nextNodeId: nextNode,
908
+ businessId: this.businessId,
909
+ notificationType: newNoticeType,
910
+ userId: util.getStorage('userId'),
911
+ notificationMsg: noticeInfo,
912
+ customPresetUserJson: JSON.stringify(this.presetList),
913
+ presetUserJson: JSON.stringify(this.presetUserJson),
914
+ nextReadUserId: this.readMultiple
915
+ ? this.mixReadList && this.mixReadList.join('|')
916
+ : nextReadUserId,
917
+ nextOrgId: !this.isShowNextUser
918
+ ? this.multiple
919
+ ? this.mixOrgIdList && this.mixOrgIdList.join('|')
920
+ : nextOrgId
921
+ : '',
922
+ handleExplain: handleExplain,
923
+ presetReadUserId:
924
+ this.mixPresetList && this.mixPresetList.length > 0
925
+ ? this.mixPresetList.join('|')
926
+ : presetReadUserId.join(','),
927
+ opinion: this.newOpinion || newOpinion
928
+ };
929
+ if (this.enableCustomLimitTimeSetting) {
930
+ params.customLimitTime = customLimitTime;
931
+ if (!customLimitTime) {
932
+ this.$message.warning('请选择或输入限时办理的天数');
933
+ this.nextNode.customLimitTime = '';
934
+ return;
935
+ } else if (
936
+ !Number(customLimitTime) ||
937
+ customLimitTime.indexOf('.') != -1 ||
938
+ Number(customLimitTime) < 0
939
+ ) {
940
+ this.$message.warning('请输入正确的天数');
941
+ this.nextNode.customLimitTime = '';
942
+ return;
943
+ }
944
+ }
945
+ if (this.activeNames != '1') delete params.customPresetUserJson;
946
+ if (this.isFreeStartFlow || this.formType === 'readTransfer') {
947
+ let newParm = {};
948
+ newParm.copyHistory = this.copyHistory === 'needCopyPendedHistory';
949
+ newParm.startFlowParamJson = params;
950
+ // newParm.startFlowParamJson.businessId = this.id; //this.id
951
+ newParm.startFlowParamJson.taskExamineParam = {
952
+ startFlowFirstNodeName: this.taskExamineParam
953
+ };
954
+ newParm.startFlowParamJson = JSON.stringify(
955
+ newParm.startFlowParamJson
956
+ );
957
+ for (let key in this.taskParams) {
958
+ if (Array.isArray(this.taskParams[key])) {
959
+ this.taskParams[key] =
960
+ this.taskParams[key].length > 0
961
+ ? this.taskParams[key].join(',')
962
+ : '';
963
+ }
964
+ }
965
+
966
+ newParm.submitTaskParamJson = JSON.stringify(this.taskParams);
967
+ if (this.formType == 'readTransfer') {
968
+ newParm.readTransferHandleStartFlowParamJson =
969
+ JSON.stringify(params);
970
+ newParm.taskReadEndParamJson = JSON.stringify(this.taskParams);
971
+ delete newParm.copyHistory;
972
+ delete newParm.startFlowParamJson;
973
+ delete newParm.submitTaskParamJson;
974
+ }
975
+ params = newParm;
976
+ }
977
+ if (this.copyHistory && !this.isFreeStartFlow) {
978
+ params.pendingId = this.pendingId;
979
+ delete params.businessId;
980
+ }
981
+ util
982
+ .ajax({
983
+ url: this.isFreeStartFlow
984
+ ? freeStartFlowWithSubmitTask
985
+ : this.formType == 'readTransfer'
986
+ ? startReadTransferHandleFlowWithTaskReadEnd
987
+ : this.copyHistory
988
+ ? freeStartFlow
989
+ : register,
990
+ method: 'post',
991
+ data: params
992
+ })
993
+ .then((res) => {
994
+ const { status, message } = res;
995
+ if (this.showBtn) {
996
+ this.loading = false;
997
+ } else {
998
+ this.allLoading.close();
999
+ }
1000
+ if (status === 'success' || res.rCode == 0) {
1001
+ this.quit(true);
1002
+ this.simpleTips && this.$message.success('操作成功');
1003
+ } else {
1004
+ this.$message.error(message || '系统错误,请联系管理员!');
1005
+ }
1006
+ })
1007
+ .catch((err) => {
1008
+ if (this.showBtn) {
1009
+ this.loading = false;
1010
+ } else {
1011
+ this.allLoading.close();
1012
+ }
1013
+ if (err.message && err.message !== 'canceled') {
1014
+ this.$message.error(err.message);
1015
+ }
1016
+ });
1017
+ } else {
1018
+ return false;
1019
+ }
1020
+ });
1021
+ },
1022
+ getNodeInfos(nodeId, index) {
1023
+ let params = {
1024
+ processDefinitionId: this.processDefinitionId,
1025
+ nextNodeId: nodeId ? nodeId : this.nextNode.nextNode,
1026
+ businessId: this.id,
1027
+ userId: util.getStorage('userId')
1028
+ };
1029
+ util
1030
+ .ajax({ url: getNodeInfo, params })
1031
+ .then((res) => {
1032
+ const {
1033
+ status,
1034
+ message,
1035
+ data: {
1036
+ nextUserList,
1037
+ nodeExtAttr,
1038
+ countersignaturetypeText,
1039
+ countersignaturetypeCode
1040
+ }
1041
+ } = res;
1042
+ if (this.showBtn) {
1043
+ this.loading = false;
1044
+ } else {
1045
+ this.allLoading.close();
1046
+ }
1047
+ if (status === 'success') {
1048
+ this.isCurrentNodeForbiddenChangeCandidate =
1049
+ nodeExtAttr.isCurrentNodeForbiddenChangeCandidate;
1050
+ this.nextNode.userInfo = nextUserList;
1051
+ this.countersignaturetypeCode = countersignaturetypeCode;
1052
+ this.nextNode.countersignaturetypeText = countersignaturetypeText;
1053
+ this.enableCustomLimitTimeSetting =
1054
+ nodeExtAttr.enableCustomLimitTimeSetting == 1;
1055
+ this.isTaskread = nodeExtAttr.isTaskread;
1056
+ this.isHandleExplain = nodeExtAttr.isHandleExplain;
1057
+ this.isCustomUser = nodeExtAttr.isCustomUser; //是否展示选人组件按钮
1058
+ this.presetEdit = nodeExtAttr.presetEdit; //是否展示备选人
1059
+ this.isDefSelectedObj = nodeExtAttr.isDefSelectedObj; //是否默认选中
1060
+ if (
1061
+ nodeExtAttr.userSelectionType == 7 ||
1062
+ nodeExtAttr.userSelectionType == 8 ||
1063
+ nodeExtAttr.userSelectionType == 9 ||
1064
+ nodeExtAttr.userSelectionType == 10 ||
1065
+ nodeExtAttr.userSelectionType == 11 ||
1066
+ nodeExtAttr.userSelectionType == 12
1067
+ ) {
1068
+ this.getIsShowNextUser(
1069
+ nodeExtAttr && nodeExtAttr.userSelectionType
1070
+ );
1071
+ } else {
1072
+ const { multiple, params } = this.isMultiple(
1073
+ nodeExtAttr.userSelectionType
1074
+ );
1075
+ this.multiple = multiple;
1076
+ this.params = params;
1077
+ }
1078
+ // this.isReadMultiple(nodeExtAttr.userSelectionType);
1079
+
1080
+ nextUserList.map((item) => {
1081
+ if (
1082
+ this.multiple &&
1083
+ nodeExtAttr.isDefSelectedObj == 1 &&
1084
+ nextUserList !== undefined
1085
+ ) {
1086
+ this.nextNode.nextUser.push(item.userId);
1087
+ this.selectUserList.push({
1088
+ showname: item.username,
1089
+ showid: item.userId
1090
+ });
1091
+ }
1092
+
1093
+ this.options.push({
1094
+ showname: item.username,
1095
+ showid: item.userId
1096
+ });
1097
+ });
1098
+ if (this.multiple) {
1099
+ this.nextNode.nextReadUserId = [];
1100
+ } else {
1101
+ this.nextNode.nextReadUserId = '';
1102
+ }
1103
+ if (
1104
+ nextUserList.length > 0 &&
1105
+ nodeExtAttr.isDefSelectedObj == 1 &&
1106
+ !this.multiple
1107
+ ) {
1108
+ this.nextNode.nextUser = nextUserList[0].userId;
1109
+ this.selectUserList.push({
1110
+ showname: nextUserList[0].username,
1111
+ showid: nextUserList[0].userId
1112
+ });
1113
+ }
1114
+ this.radioList = this.options;
1115
+ } else {
1116
+ this.$message.error(message || '系统错误,请联系管理员!');
1117
+ }
1118
+ nodeId && this.$refs.selectUser[index].changeInfo();
1119
+ })
1120
+ .catch((err) => {
1121
+ if (this.showBtn) {
1122
+ this.loading = false;
1123
+ } else {
1124
+ this.allLoading.close();
1125
+ }
1126
+ if (err.message && err.message !== 'canceled') {
1127
+ this.$message.error(err.message);
1128
+ }
1129
+ });
1130
+ },
1131
+ changeSel(val) {
1132
+ this.nextNode.nextUser = [];
1133
+ this.options = [];
1134
+ this.selectUserList = [];
1135
+ this.radioList = [];
1136
+ if (this.showBtn) {
1137
+ this.loading = true;
1138
+ } else {
1139
+ this.allLoading = util.loading(this.$loading, '加载中...');
1140
+ }
1141
+ this.getNodeInfos();
1142
+ },
1143
+ // 取消
1144
+ quit(val) {
1145
+ if (val === true) return this.$emit('cancel', val);
1146
+ this.$emit('cancel', false);
1147
+ },
1148
+ getFind() {
1149
+ util
1150
+ .ajax({
1151
+ url: findSysCodes
1152
+ })
1153
+ .then((res) => {
1154
+ const { status, message } = res;
1155
+ if (status === 'success') {
1156
+ this.nextNode.noticeType = message.split(',');
1157
+ let arr = [];
1158
+ this.nextNode.noticeList.map((item) => {
1159
+ this.nextNode.noticeType.map((x) => {
1160
+ if (x == item.cciValue) {
1161
+ arr.push(x);
1162
+ }
1163
+ });
1164
+ });
1165
+ this.nextNode.noticeType = arr;
1166
+ } else {
1167
+ this.$message.error(message || '系统错误,请联系管理员!');
1168
+ }
1169
+ })
1170
+ .catch((err) => {
1171
+ if (this.showBtn) {
1172
+ this.loading = false;
1173
+ } else {
1174
+ this.allLoading.close();
1175
+ }
1176
+ if (err.message && err.message !== 'canceled') {
1177
+ this.$message.error(err.message);
1178
+ }
1179
+ });
1180
+ },
1181
+ /**
1182
+ * isMultiple
1183
+ * @desc:是否多选
1184
+ * @author liufan
1185
+ * @date 2022年9月13日
1186
+ **/
1187
+ isMultiple(val, choiceOrgId, choiceDeptId, pOrgId) {
1188
+ let multiple = false;
1189
+ let params = {};
1190
+ if (val == 2 || val == 4 || val == 6 || val == 16 || val == 12) {
1191
+ multiple = true;
1192
+ }
1193
+ if (val == 1 || val == 2 || val == 5) {
1194
+ params.filid = this.userModel.orgId;
1195
+ params.only_filid = true;
1196
+ if (choiceOrgId) {
1197
+ params.filid = choiceOrgId;
1198
+ }
1199
+ }
1200
+ if (val == 5 || val == 6) {
1201
+ params.filid = this.userModel.orgId;
1202
+ params.deptid = this.userModel.orgId;
1203
+ if (choiceDeptId) {
1204
+ params.deptid = choiceDeptId;
1205
+ }
1206
+ if (choiceOrgId) {
1207
+ params.filid = choiceOrgId;
1208
+ }
1209
+ }
1210
+ if (val == 15 || val == 16) {
1211
+ params.filid = this.userModel.orgId;
1212
+ if (pOrgId) {
1213
+ params.filid = pOrgId;
1214
+ }
1215
+ }
1216
+ return { multiple, params };
1217
+ },
1218
+ getStartFlow(processId) {
1219
+ if (!processId) {
1220
+ return false;
1221
+ }
1222
+ if (this.showBtn) {
1223
+ this.loading = true;
1224
+ } else {
1225
+ this.allLoading = util.loading(this.$loading, '加载中...');
1226
+ }
1227
+ this.businessId = this.id;
1228
+ let params = {
1229
+ processDefinitionId: processId, // processId || this.processDefinitionId,
1230
+ userId: util.getStorage('userId'),
1231
+ businessId: this.businessId
1232
+ };
1233
+ // 获取节点
1234
+ util
1235
+ .ajax({ url: toStartFlow, params })
1236
+ .then((res) => {
1237
+ //pc接口返回数据处理
1238
+ const { status, message, data } = res;
1239
+ if (status == 'success') {
1240
+ data.nodeInfoMap.nodeExtAttr.submitTipsMsg &&
1241
+ this.$confirm(
1242
+ data.nodeInfoMap.nodeExtAttr.submitTipsMsg,
1243
+ '提示',
1244
+ {
1245
+ confirmButtonText: '确定',
1246
+ cancelButtonText: '取消',
1247
+ type: 'warning'
1248
+ }
1249
+ )
1250
+ .then(() => {})
1251
+ .catch(() => {
1252
+ this.quit();
1253
+ });
1254
+ data.nextNodeCheckType &&
1255
+ (this.nextNodeCheckType = data.nextNodeCheckType);
1256
+ data.nextOperateCheckType &&
1257
+ (this.nextOperateCheckType = data.nextOperateCheckType);
1258
+ this.customPresetHintMessage = data.customPresetHintMessage;
1259
+ this.readOnlyNotificationType = data.readOnlyNotificationType;
1260
+ this.notificationMessageReadOnly =
1261
+ data.notificationMessageReadOnly == 'true';
1262
+ this.nextNode.nodeInfo = data.nextNodeList;
1263
+ this.nextNode.nextNode = data.nextNodeList[0].nodeId;
1264
+ this.isPreset = data.isPreset;
1265
+ this.isHideDefaultOperation =
1266
+ data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation;
1267
+ this.defaultNextNode = data.nodeInfoMap.nodeExtAttr.defaultNextNode;
1268
+ this.isChooseNextNode =
1269
+ data.nodeInfoMap.nodeExtAttr.isChooseNextNode;
1270
+ this.isCdjxjTaskHandle = data.isCdjxjTaskHandle;
1271
+ if (this.isChooseNextNode == 1) {
1272
+ this.operationList = [
1273
+ { key: 0, value: '默认', list: [] },
1274
+ { key: 1, value: '自定义', list: [] }
1275
+ ];
1276
+ let arr = [];
1277
+ for (let key in data.taskNodeMap) {
1278
+ arr.push({ nodeName: data.taskNodeMap[key], nodeId: key });
1279
+ }
1280
+ this.operationList[0].list = data.nextNodeList;
1281
+ this.operationList[1].list = arr;
1282
+ if (this.isHideDefaultOperation != 1) {
1283
+ this.nextNode.nextOperate = 0;
1284
+ this.nextNode.nodeInfo = this.operationList[0].list;
1285
+ if (this.nextNode.nodeInfo.length > 0) {
1286
+ let defaultNodeData = data.nextNodeList.filter(
1287
+ (x) => x.nodeId == this.defaultNextNode
1288
+ );
1289
+ this.nextNode.nextNode =
1290
+ defaultNodeData.length > 0
1291
+ ? this.defaultNextNode
1292
+ : data.nextNodeList[0].nodeId;
1293
+ }
1294
+ } else if (
1295
+ data.nodeInfoMap.nodeExtAttr.defaultNextOperate == 1 ||
1296
+ data.nodeInfoMap.nodeExtAttr.isHideDefaultOperation == 1
1297
+ ) {
1298
+ // this.nextNode.nodeInfo = data.nextNodeList
1299
+ this.nextNode.nextOperate = 1;
1300
+ this.nextNode.nodeInfo = this.operationList[1].list;
1301
+ if (this.nextNode.nodeInfo.length > 0) {
1302
+ let defaultNodeData = data.nextNodeList.filter(
1303
+ (x) => x.nodeId == this.defaultNextNode
1304
+ );
1305
+ this.nextNode.nextNode =
1306
+ defaultNodeData.length > 0
1307
+ ? this.defaultNextNode
1308
+ : data.nextNodeList[0].nodeId;
1309
+ }
1310
+ }
1311
+ }
1312
+ this.isCustomPreset = data.isCustomPreset;
1313
+ this.presetTaskNodeKeyStr = data.presetTaskNodeKeyStr;
1314
+ this.presetTaskNodeMap = data.presetTaskNodeMap;
1315
+ this.isSinglePage = data.taskExamine.isSinglePage;
1316
+ this.isSinglePage &&
1317
+ (this.nextNode.opinion = data.taskExamine.opinion);
1318
+ // this.nextNode.noticeInfo = data.taskExamine.notificationMsg;
1319
+ this.nextNode.nodeName = data.taskExamine.nodeName;
1320
+ this.canPresetRead = data.canPresetRead;
1321
+ if (data.canPresetRead) {
1322
+ let ids =
1323
+ data.nodeInfoMap.nodeExtAttr.presetReadCandinateIds.split(',');
1324
+ let names =
1325
+ data.nodeInfoMap.nodeExtAttr.presetReadCandinateNames.split(
1326
+ ','
1327
+ );
1328
+ ids.map((item, index) => {
1329
+ this.presetReadUserId.push({
1330
+ showid: item,
1331
+ showname: names[index]
1332
+ });
1333
+ this.selectPresetUserList.push({
1334
+ showid: item,
1335
+ showname: names[index]
1336
+ });
1337
+ this.nextNode.presetReadUserId.push(item);
1338
+ });
1339
+ }
1340
+ this.getNodeInfos();
1341
+ // this.getPresetFlowInfo();
1342
+ this.isCustomPreset &&
1343
+ this.$refs.customPreset.getPresetFlowInfo(this.nextNode.nextNode);
1344
+ this.getFind();
1345
+ this.getMessage();
1346
+ } else {
1347
+ this.$message.error(message || '系统错误,请联系管理员!');
1348
+ }
1349
+ })
1350
+ .catch((err) => {
1351
+ if (this.showBtn) {
1352
+ this.loading = false;
1353
+ } else {
1354
+ this.allLoading.close();
1355
+ }
1356
+ if (err.message && err.message !== 'canceled') {
1357
+ this.$message.error(err.message);
1358
+ }
1359
+ });
1360
+ }
1361
+ }
1362
+ };
1363
+ </script>