eoss-ui 0.7.94 → 0.7.95

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 (228) hide show
  1. package/lib/calogin.js +233 -233
  2. package/lib/eoss-ui.common.js +759 -771
  3. package/lib/flow.js +121 -120
  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/radio-group.js +98 -111
  8. package/lib/theme-chalk/index.css +1 -1
  9. package/lib/theme-chalk/login.css +1 -1
  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 +39 -39
  26. package/packages/data-table/src/main.vue +1845 -1845
  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/TimeLimit.vue +190 -190
  46. package/packages/flow/src/main.vue +4145 -4144
  47. package/packages/flow-group/index.js +5 -5
  48. package/packages/flow-group/src/main.vue +750 -750
  49. package/packages/flow-list/index.js +5 -5
  50. package/packages/form/index.js +5 -5
  51. package/packages/handle-user/index.js +5 -5
  52. package/packages/handle-user/src/main.vue +137 -137
  53. package/packages/handler/index.js +5 -5
  54. package/packages/handler/src/main.vue +499 -499
  55. package/packages/icon/index.js +5 -5
  56. package/packages/icons/index.js +5 -5
  57. package/packages/icons/src/main.vue +81 -81
  58. package/packages/input/index.js +5 -5
  59. package/packages/input/src/main.vue +356 -356
  60. package/packages/input-number/index.js +5 -5
  61. package/packages/input-number/src/main.vue +106 -106
  62. package/packages/label/index.js +5 -5
  63. package/packages/label/src/main.vue +457 -457
  64. package/packages/layout/index.js +5 -5
  65. package/packages/layout/src/item.vue +152 -152
  66. package/packages/layout/src/main.vue +31 -31
  67. package/packages/login/index.js +5 -5
  68. package/packages/login/src/main.vue +2088 -2088
  69. package/packages/main/index.js +5 -5
  70. package/packages/main/src/default/message.vue +249 -249
  71. package/packages/main/src/default/notice.vue +157 -157
  72. package/packages/main/src/default/userinfo.vue +513 -513
  73. package/packages/main/src/simplicity/index.vue +2335 -2335
  74. package/packages/main/src/simplicity/lists.vue +84 -84
  75. package/packages/main/src/simplicity/router-page.vue +45 -45
  76. package/packages/main/src/simplicity/userinfo.vue +408 -408
  77. package/packages/main/src/simplicityTop/index.vue +2620 -2620
  78. package/packages/main/src/simplicityTop/userinfo.vue +408 -408
  79. package/packages/menu/index.js +5 -5
  80. package/packages/nav/index.js +5 -5
  81. package/packages/notify/index.js +5 -5
  82. package/packages/notify/src/main.vue +538 -538
  83. package/packages/page/index.js +5 -5
  84. package/packages/page/src/main.vue +167 -167
  85. package/packages/pagination/index.js +5 -5
  86. package/packages/pagination/src/main.vue +96 -96
  87. package/packages/player/index.js +5 -5
  88. package/packages/player/src/main.vue +194 -194
  89. package/packages/qr-code/index.js +5 -5
  90. package/packages/qr-code/src/main.vue +170 -170
  91. package/packages/radio-group/index.js +6 -6
  92. package/packages/radio-group/src/main.vue +319 -319
  93. package/packages/retrial-auth/index.js +5 -5
  94. package/packages/retrial-auth/src/main.vue +299 -299
  95. package/packages/select/index.js +5 -5
  96. package/packages/select-ganged/index.js +5 -5
  97. package/packages/select-ganged/src/main.vue +724 -724
  98. package/packages/selector/index.js +5 -5
  99. package/packages/selector-panel/index.js +5 -5
  100. package/packages/selector-panel/src/tree.vue +129 -129
  101. package/packages/sizer/index.js +5 -5
  102. package/packages/sizer/src/main.vue +254 -254
  103. package/packages/steps/index.js +5 -5
  104. package/packages/steps/src/main.vue +181 -181
  105. package/packages/switch/index.js +5 -5
  106. package/packages/table-form/index.js +5 -5
  107. package/packages/tabs/index.js +5 -5
  108. package/packages/tabs/src/main.vue +788 -788
  109. package/packages/tabs-panel/index.js +5 -5
  110. package/packages/tabs-panel/src/main.vue +29 -29
  111. package/packages/theme-chalk/lib/base.css +1 -0
  112. package/packages/theme-chalk/lib/button-group.css +1 -0
  113. package/packages/theme-chalk/lib/button.css +1 -0
  114. package/packages/theme-chalk/lib/calendar.css +1 -0
  115. package/packages/theme-chalk/lib/calogin.css +0 -0
  116. package/packages/theme-chalk/lib/card.css +1 -0
  117. package/packages/theme-chalk/lib/cascader.css +0 -0
  118. package/packages/theme-chalk/lib/checkbox-group.css +1 -0
  119. package/packages/theme-chalk/lib/clients.css +1 -0
  120. package/packages/theme-chalk/lib/data-table-form.css +1 -0
  121. package/packages/theme-chalk/lib/data-table.css +1 -0
  122. package/packages/theme-chalk/lib/date-picker.css +1 -0
  123. package/packages/theme-chalk/lib/dialog.css +1 -0
  124. package/packages/theme-chalk/lib/enable-drag.css +1 -0
  125. package/packages/theme-chalk/lib/enterprise.css +1 -0
  126. package/packages/theme-chalk/lib/error-page.css +1 -0
  127. package/packages/theme-chalk/lib/flow-chart.css +0 -0
  128. package/packages/theme-chalk/lib/flow-group.css +1 -0
  129. package/packages/theme-chalk/lib/flow-list.css +1 -0
  130. package/packages/theme-chalk/lib/flow.css +1 -0
  131. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  132. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  133. package/packages/theme-chalk/lib/form.css +1 -0
  134. package/packages/theme-chalk/lib/handle-user.css +1 -0
  135. package/packages/theme-chalk/lib/handler.css +1 -0
  136. package/packages/theme-chalk/lib/icon.css +1 -0
  137. package/packages/theme-chalk/lib/icons.css +1 -0
  138. package/packages/theme-chalk/lib/index.css +1 -0
  139. package/packages/theme-chalk/lib/input-number.css +0 -0
  140. package/packages/theme-chalk/lib/input.css +1 -0
  141. package/packages/theme-chalk/lib/label.css +1 -0
  142. package/packages/theme-chalk/lib/layout.css +1 -0
  143. package/packages/theme-chalk/lib/login.css +1 -0
  144. package/packages/theme-chalk/lib/main.css +1 -0
  145. package/packages/theme-chalk/lib/menu.css +1 -0
  146. package/packages/theme-chalk/lib/nav.css +1 -0
  147. package/packages/theme-chalk/lib/notify.css +0 -0
  148. package/packages/theme-chalk/lib/page.css +1 -0
  149. package/packages/theme-chalk/lib/pagination.css +1 -0
  150. package/packages/theme-chalk/lib/player.css +1 -0
  151. package/packages/theme-chalk/lib/qr-code.css +1 -0
  152. package/packages/theme-chalk/lib/radio-group.css +1 -0
  153. package/packages/theme-chalk/lib/retrial-auth.css +1 -0
  154. package/packages/theme-chalk/lib/select-ganged.css +1 -0
  155. package/packages/theme-chalk/lib/select.css +1 -0
  156. package/packages/theme-chalk/lib/selector-panel.css +1 -0
  157. package/packages/theme-chalk/lib/selector.css +1 -0
  158. package/packages/theme-chalk/lib/simplicity-top.css +1 -0
  159. package/packages/theme-chalk/lib/simplicity.css +1 -0
  160. package/packages/theme-chalk/lib/sizer.css +1 -0
  161. package/packages/theme-chalk/lib/steps.css +1 -0
  162. package/packages/theme-chalk/lib/switch.css +1 -0
  163. package/packages/theme-chalk/lib/table-form.css +0 -0
  164. package/packages/theme-chalk/lib/tabs-panel.css +0 -0
  165. package/packages/theme-chalk/lib/tabs.css +1 -0
  166. package/packages/theme-chalk/lib/tips.css +1 -0
  167. package/packages/theme-chalk/lib/toolbar.css +1 -0
  168. package/packages/theme-chalk/lib/tree-group.css +1 -0
  169. package/packages/theme-chalk/lib/tree.css +1 -0
  170. package/packages/theme-chalk/lib/upload.css +1 -0
  171. package/packages/theme-chalk/lib/wujie.css +0 -0
  172. package/packages/theme-chalk/lib/wxlogin.css +1 -0
  173. package/packages/theme-chalk/src/base.scss +261 -261
  174. package/packages/theme-chalk/src/button-group.scss +176 -176
  175. package/packages/theme-chalk/src/button.scss +24 -24
  176. package/packages/theme-chalk/src/calendar.scss +113 -113
  177. package/packages/theme-chalk/src/card.scss +99 -99
  178. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  179. package/packages/theme-chalk/src/clients.scss +87 -87
  180. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  181. package/packages/theme-chalk/src/date-picker.scss +7 -7
  182. package/packages/theme-chalk/src/dialog.scss +77 -77
  183. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  184. package/packages/theme-chalk/src/enterprise.scss +5 -5
  185. package/packages/theme-chalk/src/error-page.scss +18 -18
  186. package/packages/theme-chalk/src/flow-group.scss +110 -110
  187. package/packages/theme-chalk/src/handle-user.scss +40 -40
  188. package/packages/theme-chalk/src/icons.scss +99 -99
  189. package/packages/theme-chalk/src/input.scss +9 -9
  190. package/packages/theme-chalk/src/label.scss +24 -24
  191. package/packages/theme-chalk/src/layout.scss +46 -46
  192. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  193. package/packages/theme-chalk/src/nav.scss +111 -111
  194. package/packages/theme-chalk/src/page.scss +3 -3
  195. package/packages/theme-chalk/src/pagination.scss +29 -29
  196. package/packages/theme-chalk/src/player.scss +9 -9
  197. package/packages/theme-chalk/src/qr-code.scss +17 -17
  198. package/packages/theme-chalk/src/radio-group.scss +9 -9
  199. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  200. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  201. package/packages/theme-chalk/src/select.scss +8 -8
  202. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  203. package/packages/theme-chalk/src/sizer.scss +36 -36
  204. package/packages/theme-chalk/src/steps.scss +88 -88
  205. package/packages/theme-chalk/src/switch.scss +3 -3
  206. package/packages/theme-chalk/src/table-form.scss +1 -1
  207. package/packages/theme-chalk/src/tabs.scss +87 -87
  208. package/packages/theme-chalk/src/tips.scss +7 -7
  209. package/packages/theme-chalk/src/toolbar.scss +179 -179
  210. package/packages/theme-chalk/src/tree-group.scss +72 -72
  211. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  212. package/packages/tips/index.js +5 -5
  213. package/packages/toolbar/index.js +5 -5
  214. package/packages/tree/index.js +5 -5
  215. package/packages/tree-group/index.js +5 -5
  216. package/packages/upload/index.js +5 -5
  217. package/packages/upload/src/picture.js +15 -15
  218. package/packages/wujie/index.js +5 -5
  219. package/packages/wxlogin/index.js +5 -5
  220. package/packages/wxlogin/src/main.vue +128 -128
  221. package/src/config/image.js +2 -2
  222. package/src/index.js +1 -1
  223. package/src/utils/bus.js +3 -3
  224. package/src/utils/date-util.js +312 -312
  225. package/src/utils/http.js +50 -50
  226. package/src/utils/store.js +21 -21
  227. package/src/utils/webSocket.js +107 -107
  228. package/packages/theme-chalk/gulpfile.js +0 -25
@@ -1,750 +1,750 @@
1
- <template>
2
- <div class="es-flow-group" :class="{ 'is-hide-flow': !isShow }">
3
- <div class="es-flow-group-main">
4
- <el-tabs
5
- class="es-flow-tabs es-tabs"
6
- type="border-card"
7
- v-model="activeName"
8
- ref="tabs"
9
- :before-leave="handleBefore"
10
- >
11
- <template v-for="(items, indexs) in tabs">
12
- <el-tab-pane
13
- v-if="handleHide(items.hide)"
14
- :key="items.id || indexs"
15
- :immediate="items.label === '流程图' ? false : items.immediate"
16
- :name="String(indexs)"
17
- :class="{ 'es-flex-vertical': items.average }"
18
- >
19
- <span
20
- slot="label"
21
- :style="{
22
- color:
23
- activeName == String(indexs) ? items.activeColor : items.color
24
- }"
25
- >
26
- <template v-if="items.title">
27
- <template v-if="typeof items.title === 'object'">
28
- <i v-if="items.title.icon" :class="items.title.icon"></i>
29
- <el-badge
30
- v-if="items.title.count"
31
- type="primary"
32
- :value="items.title.count"
33
- :color="items.title.color"
34
- :max="99"
35
- >{{ items.title.text }}
36
- </el-badge>
37
- <template v-else>{{ items.title.text }}</template>
38
- </template>
39
- <template v-else>{{ items.title }}</template>
40
- </template>
41
- <template>{{ items.label }}</template>
42
- </span>
43
- <es-tabs-panel v-bind="items" :show="activeName === String(indexs)">
44
- <template
45
- slot-scope="{ contents, average, data, title, show, isShow }"
46
- >
47
- <template v-if="Array.isArray(contents)">
48
- <template v-for="(item, index) in contents">
49
- <div class="es-tab-pane-list" :key="index" v-if="average">
50
- <div class="es-tab-pane-main">
51
- <es-flow-list
52
- v-if="
53
- item.type === 'flow-list' ||
54
- item.type === 'flowList'
55
- "
56
- :businessId="businessId"
57
- v-bind="
58
- handleExclAttribute({
59
- data: item,
60
- attrs: ['events', 'visible', 'type']
61
- })
62
- "
63
- :display="activeName === String(indexs)"
64
- :key="index"
65
- ></es-flow-list>
66
- <es-data-table
67
- v-if="
68
- item.type === 'data-table' ||
69
- item.type === 'dataTable'
70
- "
71
- :appId="taskExamineAppId"
72
- v-bind="
73
- handleExclAttribute({
74
- data: item,
75
- attrs: ['events', 'visible', 'type']
76
- })
77
- "
78
- :class="{
79
- 'es-flow-group-data-table':
80
- item.type === 'data-table' ||
81
- item.type === 'dataTable'
82
- }"
83
- :display="activeName === String(indexs)"
84
- v-on="item.events"
85
- >
86
- <template v-if="item.dialog" slot="dialog">
87
- <template v-if="Array.isArray(item.dialog)">
88
- <es-dialog
89
- v-for="(ele, ids) in item.dialog"
90
- :isReload="true"
91
- v-bind="ele"
92
- :key="ids"
93
- :visible.sync="ele.visible"
94
- v-on="{ ...ele.events }"
95
- >
96
- </es-dialog>
97
- </template>
98
- <es-dialog
99
- v-else
100
- :isReload="true"
101
- v-bind="item.dialog"
102
- :visible.sync="item.dialog.visible"
103
- v-on="{ ...item.dialog.events }"
104
- >
105
- </es-dialog>
106
- </template>
107
- </es-data-table>
108
- <es-tree-group
109
- v-if="
110
- item.type === 'tree-group' ||
111
- item.type === 'treeGroup'
112
- "
113
- :appId="taskExamineAppId"
114
- v-bind="
115
- handleExclAttribute({
116
- data: item,
117
- attrs: ['events', 'visible', 'type']
118
- })
119
- "
120
- :display="activeName === String(indexs)"
121
- v-on="{ ...item.events }"
122
- ></es-tree-group>
123
- <iframe
124
- v-if="item.type === 'iframe' && !item.blank"
125
- :id="item.id || item.name"
126
- :name="item.name"
127
- frameborder="0"
128
- width="100%"
129
- height="100%"
130
- :src="handleUrlJoinParams(item)"
131
- ></iframe>
132
- <es-upload
133
- v-if="item.type === 'attachment'"
134
- :file-count.sync="title.count"
135
- height="auto"
136
- class="es-attachment"
137
- :ownId="businessId"
138
- v-bind="
139
- handleExclAttribute({
140
- data: item,
141
- attrs: ['events', 'type']
142
- })
143
- "
144
- :display="activeName === String(indexs)"
145
- v-on="{ ...item.events }"
146
- ></es-upload>
147
- </div>
148
- </div>
149
- <template v-else>
150
- <es-form
151
- v-if="item.type === 'form'"
152
- ref="esFlowForm"
153
- :showMsg="showMsg"
154
- v-bind="
155
- handleExclAttribute({
156
- data: item,
157
- attrs: ['events', 'visible', 'type', 'model', 'ref']
158
- })
159
- "
160
- full
161
- :key="index"
162
- :autoId="true"
163
- :show-button="false"
164
- :closeDialog="false"
165
- :display="activeName === String(indexs)"
166
- :model="item.model"
167
- :businessId.sync="businessId"
168
- v-on="{ ...item.events }"
169
- ></es-form>
170
- <es-flow-list
171
- v-if="
172
- item.type === 'flow-list' || item.type === 'flowList'
173
- "
174
- :businessId="businessId"
175
- v-bind="
176
- handleExclAttribute({
177
- data: item,
178
- attrs: ['events', 'visible', 'type']
179
- })
180
- "
181
- :display="activeName === String(indexs)"
182
- :key="index"
183
- ></es-flow-list>
184
- <es-data-table
185
- v-if="
186
- item.type === 'data-table' ||
187
- item.type === 'dataTable'
188
- "
189
- :appId="taskExamineAppId"
190
- v-bind="
191
- handleExclAttribute({
192
- data: item,
193
- attrs: ['events', 'visible', 'type']
194
- })
195
- "
196
- :key="index"
197
- :class="{
198
- 'es-flow-group-data-table':
199
- item.type === 'data-table' ||
200
- item.type === 'dataTable'
201
- }"
202
- :display="activeName === String(indexs)"
203
- v-on="item.events"
204
- >
205
- <template v-if="item.dialog" slot="dialog">
206
- <template v-if="Array.isArray(item.dialog)">
207
- <es-dialog
208
- v-for="(ele, ids) in item.dialog"
209
- :isReload="true"
210
- v-bind="ele"
211
- :key="ids"
212
- :visible.sync="ele.visible"
213
- v-on="{ ...ele.events }"
214
- >
215
- </es-dialog>
216
- </template>
217
- <es-dialog
218
- v-else
219
- :isReload="true"
220
- v-bind="item.dialog"
221
- :visible.sync="item.dialog.visible"
222
- v-on="{ ...item.dialog.events }"
223
- >
224
- </es-dialog>
225
- </template>
226
- </es-data-table>
227
- <es-tree-group
228
- v-if="
229
- item.type === 'tree-group' ||
230
- item.type === 'treeGroup'
231
- "
232
- :appId="taskExamineAppId"
233
- v-bind="
234
- handleExclAttribute({
235
- data: item,
236
- attrs: ['events', 'visible', 'type']
237
- })
238
- "
239
- :key="index"
240
- :display="activeName === String(indexs)"
241
- v-on="{ ...item.events }"
242
- ></es-tree-group>
243
- <iframe
244
- v-if="item.type === 'iframe' && !item.blank"
245
- frameborder="0"
246
- width="100%"
247
- height="100%"
248
- :key="index"
249
- :id="item.id || item.name"
250
- :name="item.name"
251
- :src="handleUrlJoinParams(item)"
252
- ></iframe>
253
- <es-upload
254
- v-if="item.type === 'attachment'"
255
- height="auto"
256
- class="es-attachment"
257
- :ownId="businessId"
258
- v-bind="
259
- handleExclAttribute({
260
- data: item,
261
- attrs: ['events', 'type']
262
- })
263
- "
264
- :key="index"
265
- :file-count.sync="title.count"
266
- :display="activeName === String(indexs)"
267
- v-on="{ ...item.events }"
268
- ></es-upload>
269
- <es-dialog
270
- v-if="
271
- item.type === 'dialog' &&
272
- activeName === String(indexs)
273
- "
274
- :isReload="true"
275
- v-bind="item"
276
- :key="index"
277
- :visible.sync="item.visible"
278
- v-on="{ ...item.events }"
279
- >
280
- </es-dialog>
281
- <component
282
- v-if="item.component || item.type == 'component'"
283
- :is="item.is || item.type"
284
- show
285
- isShow
286
- v-bind="
287
- handleExclAttribute({
288
- data: item,
289
- attrs: ['is', 'type']
290
- })
291
- "
292
- ></component>
293
- </template>
294
- </template>
295
- </template>
296
- <template v-else>
297
- <component
298
- v-if="contents.component || contents.type == 'component'"
299
- :is="contents.is || contents.type"
300
- show
301
- isShow
302
- v-bind="
303
- handleExclAttribute({
304
- data: contents,
305
- attrs: ['is', 'type']
306
- })
307
- "
308
- ></component>
309
- <es-form
310
- v-if="contents.type === 'form'"
311
- :show-button="false"
312
- ref="esFlowForm"
313
- :showMsg="showMsg"
314
- v-bind="
315
- handleExclAttribute({
316
- data: contents,
317
- attrs: ['events', 'visible', 'type', 'model', 'ref']
318
- })
319
- "
320
- full
321
- :autoId="true"
322
- :businessId.sync="businessId"
323
- :closeDialog="false"
324
- :display="activeName === String(indexs)"
325
- :model="contents.model"
326
- v-on="{ ...contents.events }"
327
- ></es-form>
328
- <es-flow-list
329
- v-if="
330
- contents.type === 'flow-list' ||
331
- contents.type === 'flowList'
332
- "
333
- :businessId="businessId"
334
- v-bind="
335
- handleExclAttribute({
336
- data: contents,
337
- attrs: ['events', 'visible', 'type']
338
- })
339
- "
340
- :display="activeName === String(indexs)"
341
- ></es-flow-list>
342
- <es-data-table
343
- v-if="
344
- contents.type === 'data-table' ||
345
- contents.type === 'dataTable'
346
- "
347
- :appId="taskExamineAppId"
348
- v-bind="
349
- handleExclAttribute({
350
- data: contents,
351
- attrs: ['events', 'visible', 'type']
352
- })
353
- "
354
- :class="{
355
- 'es-flow-group-data-table':
356
- contents.type === 'data-table' ||
357
- contents.type === 'dataTable'
358
- }"
359
- :display="activeName === String(indexs)"
360
- v-on="contents.events"
361
- >
362
- <template v-if="contents.dialog" slot="dialog">
363
- <template v-if="Array.isArray(contents.dialog)">
364
- <es-dialog
365
- v-for="(ele, ids) in contents.dialog"
366
- :isReload="true"
367
- v-bind="ele"
368
- :key="ids"
369
- :visible.sync="ele.visible"
370
- v-on="{ ...ele.events }"
371
- >
372
- </es-dialog>
373
- </template>
374
- <es-dialog
375
- v-else
376
- :isReload="true"
377
- v-bind="contents.dialog"
378
- :visible.sync="contents.dialog.visible"
379
- v-on="{ ...contents.dialog.events }"
380
- >
381
- </es-dialog>
382
- </template>
383
- </es-data-table>
384
- <es-tree-group
385
- v-if="
386
- contents.type === 'tree-group' ||
387
- contents.type === 'treeGroup'
388
- "
389
- :appId="taskExamineAppId"
390
- v-bind="
391
- handleExclAttribute({
392
- data: contents,
393
- attrs: ['events', 'visible', 'type']
394
- })
395
- "
396
- :display="activeName === String(indexs)"
397
- v-on="{ ...contents.events }"
398
- ></es-tree-group>
399
- <iframe
400
- v-if="contents.type === 'iframe' && !contents.blank"
401
- :id="contents.id || contents.name"
402
- :name="contents.name"
403
- frameborder="0"
404
- width="100%"
405
- height="100%"
406
- :src="handleUrlJoinParams(contents)"
407
- ></iframe>
408
- <es-upload
409
- v-if="contents.type === 'attachment'"
410
- :ownId="businessId"
411
- v-bind="
412
- handleExclAttribute({
413
- data: contents,
414
- attrs: ['events', 'type']
415
- })
416
- "
417
- :file-count.sync="title.count"
418
- :display="activeName === String(indexs)"
419
- height="auto"
420
- class="es-attachment"
421
- v-on="{ ...contents.events }"
422
- ></es-upload>
423
- </template>
424
- </template>
425
- </es-tabs-panel>
426
- </el-tab-pane>
427
- </template>
428
- </el-tabs>
429
- </div>
430
- <es-flow
431
- v-if="isShow"
432
- class="es-group-flow"
433
- v-bind="_flow"
434
- :width="width"
435
- :before-submit="isSubmit ? handleSubmit : undefined"
436
- :businessId="businessId"
437
- @startTaskRead="handleTaskRead"
438
- @success="handleSuccess"
439
- @save="handleSave"
440
- @endMessageChange="handleEndMessageChange"
441
- :closeParent="closeParent"
442
- ></es-flow>
443
- <slot></slot>
444
- </div>
445
- </template>
446
- <script>
447
- import util from 'eoss-ui/src/utils/util';
448
- export default {
449
- name: 'EsFlowGroup',
450
- inject: {
451
- esDialog: {
452
- default: ''
453
- },
454
- injector: {
455
- default: ''
456
- }
457
- },
458
- props: {
459
- // autoId: {
460
- // type: Boolean,
461
- // default: true
462
- // },
463
- active: {
464
- type: String,
465
- default: '0'
466
- },
467
- contents: Array,
468
- closeWindow: Boolean,
469
- closeDialog: {
470
- type: Boolean,
471
- default: true
472
- },
473
- otherValidate: Function,
474
- flow: Object,
475
- events: Object,
476
- recordid: String,
477
- pendingId: String,
478
- arcurl: String,
479
- itemname: String,
480
- show: {
481
- type: Boolean,
482
- default: true
483
- },
484
- closeParent: {
485
- type: Boolean,
486
- default: true
487
- },
488
- appId: String,
489
- zoom: false,
490
- width: {
491
- type: String,
492
- default: '360px'
493
- },
494
- refs: String,
495
- isSubmit: {
496
- type: Boolean,
497
- default: true
498
- }
499
- },
500
- data() {
501
- return {
502
- activeName: this.active,
503
- businessId: undefined,
504
- taskExamineAppId: this.appId,
505
- showMsg: true,
506
- formRefs: this.refs,
507
- submits: null
508
- };
509
- },
510
- computed: {
511
- tabs() {
512
- return this.contents ? this.contents : [];
513
- },
514
- isShow() {
515
- if (
516
- this.flow &&
517
- Object.prototype.hasOwnProperty.call(this.flow, 'show')
518
- ) {
519
- return this.flow.show;
520
- }
521
- let flow = util.getParams({ name: 'flow' });
522
- if (flow == 0) {
523
- return false;
524
- }
525
- return this.show;
526
- },
527
- _flow() {
528
- return !this.flow.pendingId
529
- ? { ...this.flow, pendingId: this.pendingId }
530
- : this.flow;
531
- }
532
- },
533
- watch: {
534
- activeName(val) {
535
- this.$emit('update:active', val);
536
- },
537
- businessId(val) {
538
- this.handleChangeData({ businessId: val });
539
- }
540
- },
541
- created() {
542
- if (this.flow.businessId || this.flow.pendingId) {
543
- this.businessId = this.flow.businessId || this.flow.pendingId;
544
- }
545
- },
546
- mounted() {},
547
- methods: {
548
- handleHide(res) {
549
- return typeof res === 'boolean'
550
- ? !res
551
- : typeof res === 'string'
552
- ? this[res]
553
- : true;
554
- },
555
- handleExclAttribute({ data, attrs }) {
556
- if (!attrs || !attrs.length) {
557
- this.ref && (this.formRefs = this.ref);
558
- return data;
559
- }
560
- return util.exclAttribute({
561
- data: data,
562
- attrs: attrs
563
- });
564
- },
565
- handleUrlJoinParams(res, flag = true) {
566
- let url = res.url;
567
- if (flag) {
568
- if (res.method) {
569
- this.submit = {
570
- id: res.id,
571
- url: url,
572
- method: typeof res.method === 'boolean' ? 'submit' : res.method
573
- };
574
- }
575
- }
576
- let param = util.extend(
577
- {},
578
- { id: this.businessId, appId: this.taskExamineAppId },
579
- res.param || {}
580
- );
581
- return util.urlJoinParams({ url, param });
582
- },
583
- handleBefore(active, old) {
584
- return new Promise((resolve, reject) => {
585
- let n = parseInt(active, 10);
586
- let item = this.tabs[n];
587
- let url = null;
588
- let name = item.name;
589
- let width = 0;
590
- let height = 0;
591
- width = util.win.screen.availWidth - 10;
592
- height = util.win.screen.availHeight - 60;
593
- if (item.url) {
594
- url = this.handleUrlJoinParams(item);
595
- }
596
- if (
597
- item.contents &&
598
- item.contents.type === 'iframe' &&
599
- item.contents.blank
600
- ) {
601
- item.contents.name && (name = item.contents.name);
602
- url = this.handleUrlJoinParams(item.contents);
603
- }
604
- if (url) {
605
- reject();
606
- util.win.open(
607
- url,
608
- name,
609
- `width=${width}px,height=${height}px,resizable=yes,status=yes,menubar=no,scrollbars=yes`
610
- );
611
- } else {
612
- resolve();
613
- }
614
- });
615
- },
616
- handleSubmit(res) {
617
- if (this.submit) {
618
- if (this.submit.id) {
619
- let iframe = document.getElementById(this.submit.id); //先找到ifram
620
-
621
- if (this.submit.url) {
622
- let url = new URL(this.submit.url);
623
- let origin = url.origin;
624
- let _origin = util.win.location.origin;
625
- if (origin != _origin) {
626
- iframe.contentWindow.postMessage({ submit: res }, '*');
627
- return new Promise((resolve, reject) => {
628
- window.addEventListener('message', function (obj) {
629
- if (obj.origin == origin) {
630
- let results = obj.data;
631
- if (results.code == 0) {
632
- resolve();
633
- } else {
634
- reject();
635
- }
636
- }
637
- });
638
- });
639
- }
640
- }
641
- return iframe.contentWindow[this.submit.method](res); //用dom对象调用子页面的方法
642
- }
643
- }
644
- let esFlowForm = this.formRefs
645
- ? this.$refs[this.formRefs]
646
- : this.$refs.esFlowForm;
647
- if (Array.isArray(esFlowForm)) {
648
- esFlowForm = esFlowForm[0];
649
- }
650
- esFlowForm;
651
- this.showMsg = res == 1 ? false : true;
652
-
653
- if (this.otherValidate) {
654
- return new Promise((resolve, reject) => {
655
- esFlowForm
656
- .submitData(undefined, false, res, res === 1)
657
- .then(() => {
658
- // 如果submitData验证通过,则执行otherValidate验证
659
- this.otherValidate(resolve, reject);
660
- })
661
- .catch((error) => {
662
- // 处理submitData可能抛出的错误
663
- reject(error);
664
- });
665
- });
666
- }
667
- return esFlowForm.submitData(undefined, false, res, res === 1);
668
- },
669
- handleTaskRead(res) {
670
- if (res.data.taskExamine && res.data.taskExamine.appId) {
671
- this.taskExamineAppId = res.data.taskExamine.appId;
672
- this.injector &&
673
- this.injector.handleChangeData({ appId: this.taskExamineAppId });
674
- }
675
- },
676
- handleEndMessageChange(val) {
677
- this.$emit('endMessageChange', val);
678
- },
679
- handleSuccess() {
680
- let windowOpenConfig = sessionStorage.getItem('windowOpenConfig');
681
- if (this.closeWindow && windowOpenConfig) {
682
- util.busEmit(this, {
683
- method: 'windowClose',
684
- ...JSON.parse(windowOpenConfig)
685
- });
686
- try {
687
- const topWin = util.getWinTop();
688
- topWin.windowClose(JSON.parse(windowOpenConfig));
689
- } catch (error) {
690
- console.warn('Failed to call windowClose:', error);
691
- }
692
- } else if (this.closeDialog && this.esDialog) {
693
- this.esDialog.handleClose();
694
- } else {
695
- try {
696
- const topWin = util.getWinTop();
697
- if (topWin.COOS_SDK) {
698
- topWin.COOS_SDK.closePopup && topWin.COOS_SDK.closePopup();
699
- } else if (topWin.opener) {
700
- topWin.close();
701
- }
702
- } catch (error) {
703
- console.warn('Failed to close window/popup:', error);
704
- }
705
- }
706
- if (this.events && this.events.success) {
707
- this.events.success();
708
- }
709
- this.$emit('success');
710
- },
711
- handleSave(id, event) {
712
- let windowOpenConfig = sessionStorage.getItem('windowOpenConfig');
713
- if (this.closeWindow && windowOpenConfig) {
714
- util.busEmit(this, {
715
- method: 'windowClose',
716
- ...JSON.parse(windowOpenConfig)
717
- });
718
- try {
719
- const topWin = util.getWinTop();
720
- topWin.windowClose(JSON.parse(windowOpenConfig));
721
- } catch (error) {
722
- console.warn('Failed to call windowClose:', error);
723
- }
724
- } else if (this.closeDialog && this.esDialog) {
725
- this.esDialog.handleClose();
726
- } else {
727
- try {
728
- const topWin = util.getWinTop();
729
- if (topWin.COOS_SDK) {
730
- topWin.COOS_SDK.closePopup && topWin.COOS_SDK.closePopup();
731
- } else if (topWin.opener) {
732
- topWin.close();
733
- }
734
- } catch (error) {
735
- console.warn('Failed to close window/popup:', error);
736
- }
737
- }
738
- this.events && this.events.save(id, event);
739
- this.$emit('save', id, event);
740
- },
741
- handleChangeId(id) {
742
- this.businessId = id;
743
- },
744
- handleChangeData(res) {
745
- this.$emit('changeData', res);
746
- this.$emit('change-data', res);
747
- }
748
- }
749
- };
750
- </script>
1
+ <template>
2
+ <div class="es-flow-group" :class="{ 'is-hide-flow': !isShow }">
3
+ <div class="es-flow-group-main">
4
+ <el-tabs
5
+ class="es-flow-tabs es-tabs"
6
+ type="border-card"
7
+ v-model="activeName"
8
+ ref="tabs"
9
+ :before-leave="handleBefore"
10
+ >
11
+ <template v-for="(items, indexs) in tabs">
12
+ <el-tab-pane
13
+ v-if="handleHide(items.hide)"
14
+ :key="items.id || indexs"
15
+ :immediate="items.label === '流程图' ? false : items.immediate"
16
+ :name="String(indexs)"
17
+ :class="{ 'es-flex-vertical': items.average }"
18
+ >
19
+ <span
20
+ slot="label"
21
+ :style="{
22
+ color:
23
+ activeName == String(indexs) ? items.activeColor : items.color
24
+ }"
25
+ >
26
+ <template v-if="items.title">
27
+ <template v-if="typeof items.title === 'object'">
28
+ <i v-if="items.title.icon" :class="items.title.icon"></i>
29
+ <el-badge
30
+ v-if="items.title.count"
31
+ type="primary"
32
+ :value="items.title.count"
33
+ :color="items.title.color"
34
+ :max="99"
35
+ >{{ items.title.text }}
36
+ </el-badge>
37
+ <template v-else>{{ items.title.text }}</template>
38
+ </template>
39
+ <template v-else>{{ items.title }}</template>
40
+ </template>
41
+ <template>{{ items.label }}</template>
42
+ </span>
43
+ <es-tabs-panel v-bind="items" :show="activeName === String(indexs)">
44
+ <template
45
+ slot-scope="{ contents, average, data, title, show, isShow }"
46
+ >
47
+ <template v-if="Array.isArray(contents)">
48
+ <template v-for="(item, index) in contents">
49
+ <div class="es-tab-pane-list" :key="index" v-if="average">
50
+ <div class="es-tab-pane-main">
51
+ <es-flow-list
52
+ v-if="
53
+ item.type === 'flow-list' ||
54
+ item.type === 'flowList'
55
+ "
56
+ :businessId="businessId"
57
+ v-bind="
58
+ handleExclAttribute({
59
+ data: item,
60
+ attrs: ['events', 'visible', 'type']
61
+ })
62
+ "
63
+ :display="activeName === String(indexs)"
64
+ :key="index"
65
+ ></es-flow-list>
66
+ <es-data-table
67
+ v-if="
68
+ item.type === 'data-table' ||
69
+ item.type === 'dataTable'
70
+ "
71
+ :appId="taskExamineAppId"
72
+ v-bind="
73
+ handleExclAttribute({
74
+ data: item,
75
+ attrs: ['events', 'visible', 'type']
76
+ })
77
+ "
78
+ :class="{
79
+ 'es-flow-group-data-table':
80
+ item.type === 'data-table' ||
81
+ item.type === 'dataTable'
82
+ }"
83
+ :display="activeName === String(indexs)"
84
+ v-on="item.events"
85
+ >
86
+ <template v-if="item.dialog" slot="dialog">
87
+ <template v-if="Array.isArray(item.dialog)">
88
+ <es-dialog
89
+ v-for="(ele, ids) in item.dialog"
90
+ :isReload="true"
91
+ v-bind="ele"
92
+ :key="ids"
93
+ :visible.sync="ele.visible"
94
+ v-on="{ ...ele.events }"
95
+ >
96
+ </es-dialog>
97
+ </template>
98
+ <es-dialog
99
+ v-else
100
+ :isReload="true"
101
+ v-bind="item.dialog"
102
+ :visible.sync="item.dialog.visible"
103
+ v-on="{ ...item.dialog.events }"
104
+ >
105
+ </es-dialog>
106
+ </template>
107
+ </es-data-table>
108
+ <es-tree-group
109
+ v-if="
110
+ item.type === 'tree-group' ||
111
+ item.type === 'treeGroup'
112
+ "
113
+ :appId="taskExamineAppId"
114
+ v-bind="
115
+ handleExclAttribute({
116
+ data: item,
117
+ attrs: ['events', 'visible', 'type']
118
+ })
119
+ "
120
+ :display="activeName === String(indexs)"
121
+ v-on="{ ...item.events }"
122
+ ></es-tree-group>
123
+ <iframe
124
+ v-if="item.type === 'iframe' && !item.blank"
125
+ :id="item.id || item.name"
126
+ :name="item.name"
127
+ frameborder="0"
128
+ width="100%"
129
+ height="100%"
130
+ :src="handleUrlJoinParams(item)"
131
+ ></iframe>
132
+ <es-upload
133
+ v-if="item.type === 'attachment'"
134
+ :file-count.sync="title.count"
135
+ height="auto"
136
+ class="es-attachment"
137
+ :ownId="businessId"
138
+ v-bind="
139
+ handleExclAttribute({
140
+ data: item,
141
+ attrs: ['events', 'type']
142
+ })
143
+ "
144
+ :display="activeName === String(indexs)"
145
+ v-on="{ ...item.events }"
146
+ ></es-upload>
147
+ </div>
148
+ </div>
149
+ <template v-else>
150
+ <es-form
151
+ v-if="item.type === 'form'"
152
+ ref="esFlowForm"
153
+ :showMsg="showMsg"
154
+ v-bind="
155
+ handleExclAttribute({
156
+ data: item,
157
+ attrs: ['events', 'visible', 'type', 'model', 'ref']
158
+ })
159
+ "
160
+ full
161
+ :key="index"
162
+ :autoId="true"
163
+ :show-button="false"
164
+ :closeDialog="false"
165
+ :display="activeName === String(indexs)"
166
+ :model="item.model"
167
+ :businessId.sync="businessId"
168
+ v-on="{ ...item.events }"
169
+ ></es-form>
170
+ <es-flow-list
171
+ v-if="
172
+ item.type === 'flow-list' || item.type === 'flowList'
173
+ "
174
+ :businessId="businessId"
175
+ v-bind="
176
+ handleExclAttribute({
177
+ data: item,
178
+ attrs: ['events', 'visible', 'type']
179
+ })
180
+ "
181
+ :display="activeName === String(indexs)"
182
+ :key="index"
183
+ ></es-flow-list>
184
+ <es-data-table
185
+ v-if="
186
+ item.type === 'data-table' ||
187
+ item.type === 'dataTable'
188
+ "
189
+ :appId="taskExamineAppId"
190
+ v-bind="
191
+ handleExclAttribute({
192
+ data: item,
193
+ attrs: ['events', 'visible', 'type']
194
+ })
195
+ "
196
+ :key="index"
197
+ :class="{
198
+ 'es-flow-group-data-table':
199
+ item.type === 'data-table' ||
200
+ item.type === 'dataTable'
201
+ }"
202
+ :display="activeName === String(indexs)"
203
+ v-on="item.events"
204
+ >
205
+ <template v-if="item.dialog" slot="dialog">
206
+ <template v-if="Array.isArray(item.dialog)">
207
+ <es-dialog
208
+ v-for="(ele, ids) in item.dialog"
209
+ :isReload="true"
210
+ v-bind="ele"
211
+ :key="ids"
212
+ :visible.sync="ele.visible"
213
+ v-on="{ ...ele.events }"
214
+ >
215
+ </es-dialog>
216
+ </template>
217
+ <es-dialog
218
+ v-else
219
+ :isReload="true"
220
+ v-bind="item.dialog"
221
+ :visible.sync="item.dialog.visible"
222
+ v-on="{ ...item.dialog.events }"
223
+ >
224
+ </es-dialog>
225
+ </template>
226
+ </es-data-table>
227
+ <es-tree-group
228
+ v-if="
229
+ item.type === 'tree-group' ||
230
+ item.type === 'treeGroup'
231
+ "
232
+ :appId="taskExamineAppId"
233
+ v-bind="
234
+ handleExclAttribute({
235
+ data: item,
236
+ attrs: ['events', 'visible', 'type']
237
+ })
238
+ "
239
+ :key="index"
240
+ :display="activeName === String(indexs)"
241
+ v-on="{ ...item.events }"
242
+ ></es-tree-group>
243
+ <iframe
244
+ v-if="item.type === 'iframe' && !item.blank"
245
+ frameborder="0"
246
+ width="100%"
247
+ height="100%"
248
+ :key="index"
249
+ :id="item.id || item.name"
250
+ :name="item.name"
251
+ :src="handleUrlJoinParams(item)"
252
+ ></iframe>
253
+ <es-upload
254
+ v-if="item.type === 'attachment'"
255
+ height="auto"
256
+ class="es-attachment"
257
+ :ownId="businessId"
258
+ v-bind="
259
+ handleExclAttribute({
260
+ data: item,
261
+ attrs: ['events', 'type']
262
+ })
263
+ "
264
+ :key="index"
265
+ :file-count.sync="title.count"
266
+ :display="activeName === String(indexs)"
267
+ v-on="{ ...item.events }"
268
+ ></es-upload>
269
+ <es-dialog
270
+ v-if="
271
+ item.type === 'dialog' &&
272
+ activeName === String(indexs)
273
+ "
274
+ :isReload="true"
275
+ v-bind="item"
276
+ :key="index"
277
+ :visible.sync="item.visible"
278
+ v-on="{ ...item.events }"
279
+ >
280
+ </es-dialog>
281
+ <component
282
+ v-if="item.component || item.type == 'component'"
283
+ :is="item.is || item.type"
284
+ show
285
+ isShow
286
+ v-bind="
287
+ handleExclAttribute({
288
+ data: item,
289
+ attrs: ['is', 'type']
290
+ })
291
+ "
292
+ ></component>
293
+ </template>
294
+ </template>
295
+ </template>
296
+ <template v-else>
297
+ <component
298
+ v-if="contents.component || contents.type == 'component'"
299
+ :is="contents.is || contents.type"
300
+ show
301
+ isShow
302
+ v-bind="
303
+ handleExclAttribute({
304
+ data: contents,
305
+ attrs: ['is', 'type']
306
+ })
307
+ "
308
+ ></component>
309
+ <es-form
310
+ v-if="contents.type === 'form'"
311
+ :show-button="false"
312
+ ref="esFlowForm"
313
+ :showMsg="showMsg"
314
+ v-bind="
315
+ handleExclAttribute({
316
+ data: contents,
317
+ attrs: ['events', 'visible', 'type', 'model', 'ref']
318
+ })
319
+ "
320
+ full
321
+ :autoId="true"
322
+ :businessId.sync="businessId"
323
+ :closeDialog="false"
324
+ :display="activeName === String(indexs)"
325
+ :model="contents.model"
326
+ v-on="{ ...contents.events }"
327
+ ></es-form>
328
+ <es-flow-list
329
+ v-if="
330
+ contents.type === 'flow-list' ||
331
+ contents.type === 'flowList'
332
+ "
333
+ :businessId="businessId"
334
+ v-bind="
335
+ handleExclAttribute({
336
+ data: contents,
337
+ attrs: ['events', 'visible', 'type']
338
+ })
339
+ "
340
+ :display="activeName === String(indexs)"
341
+ ></es-flow-list>
342
+ <es-data-table
343
+ v-if="
344
+ contents.type === 'data-table' ||
345
+ contents.type === 'dataTable'
346
+ "
347
+ :appId="taskExamineAppId"
348
+ v-bind="
349
+ handleExclAttribute({
350
+ data: contents,
351
+ attrs: ['events', 'visible', 'type']
352
+ })
353
+ "
354
+ :class="{
355
+ 'es-flow-group-data-table':
356
+ contents.type === 'data-table' ||
357
+ contents.type === 'dataTable'
358
+ }"
359
+ :display="activeName === String(indexs)"
360
+ v-on="contents.events"
361
+ >
362
+ <template v-if="contents.dialog" slot="dialog">
363
+ <template v-if="Array.isArray(contents.dialog)">
364
+ <es-dialog
365
+ v-for="(ele, ids) in contents.dialog"
366
+ :isReload="true"
367
+ v-bind="ele"
368
+ :key="ids"
369
+ :visible.sync="ele.visible"
370
+ v-on="{ ...ele.events }"
371
+ >
372
+ </es-dialog>
373
+ </template>
374
+ <es-dialog
375
+ v-else
376
+ :isReload="true"
377
+ v-bind="contents.dialog"
378
+ :visible.sync="contents.dialog.visible"
379
+ v-on="{ ...contents.dialog.events }"
380
+ >
381
+ </es-dialog>
382
+ </template>
383
+ </es-data-table>
384
+ <es-tree-group
385
+ v-if="
386
+ contents.type === 'tree-group' ||
387
+ contents.type === 'treeGroup'
388
+ "
389
+ :appId="taskExamineAppId"
390
+ v-bind="
391
+ handleExclAttribute({
392
+ data: contents,
393
+ attrs: ['events', 'visible', 'type']
394
+ })
395
+ "
396
+ :display="activeName === String(indexs)"
397
+ v-on="{ ...contents.events }"
398
+ ></es-tree-group>
399
+ <iframe
400
+ v-if="contents.type === 'iframe' && !contents.blank"
401
+ :id="contents.id || contents.name"
402
+ :name="contents.name"
403
+ frameborder="0"
404
+ width="100%"
405
+ height="100%"
406
+ :src="handleUrlJoinParams(contents)"
407
+ ></iframe>
408
+ <es-upload
409
+ v-if="contents.type === 'attachment'"
410
+ :ownId="businessId"
411
+ v-bind="
412
+ handleExclAttribute({
413
+ data: contents,
414
+ attrs: ['events', 'type']
415
+ })
416
+ "
417
+ :file-count.sync="title.count"
418
+ :display="activeName === String(indexs)"
419
+ height="auto"
420
+ class="es-attachment"
421
+ v-on="{ ...contents.events }"
422
+ ></es-upload>
423
+ </template>
424
+ </template>
425
+ </es-tabs-panel>
426
+ </el-tab-pane>
427
+ </template>
428
+ </el-tabs>
429
+ </div>
430
+ <es-flow
431
+ v-if="isShow"
432
+ class="es-group-flow"
433
+ v-bind="_flow"
434
+ :width="width"
435
+ :before-submit="isSubmit ? handleSubmit : undefined"
436
+ :businessId="businessId"
437
+ @startTaskRead="handleTaskRead"
438
+ @success="handleSuccess"
439
+ @save="handleSave"
440
+ @endMessageChange="handleEndMessageChange"
441
+ :closeParent="closeParent"
442
+ ></es-flow>
443
+ <slot></slot>
444
+ </div>
445
+ </template>
446
+ <script>
447
+ import util from 'eoss-ui/src/utils/util';
448
+ export default {
449
+ name: 'EsFlowGroup',
450
+ inject: {
451
+ esDialog: {
452
+ default: ''
453
+ },
454
+ injector: {
455
+ default: ''
456
+ }
457
+ },
458
+ props: {
459
+ // autoId: {
460
+ // type: Boolean,
461
+ // default: true
462
+ // },
463
+ active: {
464
+ type: String,
465
+ default: '0'
466
+ },
467
+ contents: Array,
468
+ closeWindow: Boolean,
469
+ closeDialog: {
470
+ type: Boolean,
471
+ default: true
472
+ },
473
+ otherValidate: Function,
474
+ flow: Object,
475
+ events: Object,
476
+ recordid: String,
477
+ pendingId: String,
478
+ arcurl: String,
479
+ itemname: String,
480
+ show: {
481
+ type: Boolean,
482
+ default: true
483
+ },
484
+ closeParent: {
485
+ type: Boolean,
486
+ default: true
487
+ },
488
+ appId: String,
489
+ zoom: false,
490
+ width: {
491
+ type: String,
492
+ default: '360px'
493
+ },
494
+ refs: String,
495
+ isSubmit: {
496
+ type: Boolean,
497
+ default: true
498
+ }
499
+ },
500
+ data() {
501
+ return {
502
+ activeName: this.active,
503
+ businessId: undefined,
504
+ taskExamineAppId: this.appId,
505
+ showMsg: true,
506
+ formRefs: this.refs,
507
+ submits: null
508
+ };
509
+ },
510
+ computed: {
511
+ tabs() {
512
+ return this.contents ? this.contents : [];
513
+ },
514
+ isShow() {
515
+ if (
516
+ this.flow &&
517
+ Object.prototype.hasOwnProperty.call(this.flow, 'show')
518
+ ) {
519
+ return this.flow.show;
520
+ }
521
+ let flow = util.getParams({ name: 'flow' });
522
+ if (flow == 0) {
523
+ return false;
524
+ }
525
+ return this.show;
526
+ },
527
+ _flow() {
528
+ return !this.flow.pendingId
529
+ ? { ...this.flow, pendingId: this.pendingId }
530
+ : this.flow;
531
+ }
532
+ },
533
+ watch: {
534
+ activeName(val) {
535
+ this.$emit('update:active', val);
536
+ },
537
+ businessId(val) {
538
+ this.handleChangeData({ businessId: val });
539
+ }
540
+ },
541
+ created() {
542
+ if (this.flow.businessId || this.flow.pendingId) {
543
+ this.businessId = this.flow.businessId || this.flow.pendingId;
544
+ }
545
+ },
546
+ mounted() {},
547
+ methods: {
548
+ handleHide(res) {
549
+ return typeof res === 'boolean'
550
+ ? !res
551
+ : typeof res === 'string'
552
+ ? this[res]
553
+ : true;
554
+ },
555
+ handleExclAttribute({ data, attrs }) {
556
+ if (!attrs || !attrs.length) {
557
+ this.ref && (this.formRefs = this.ref);
558
+ return data;
559
+ }
560
+ return util.exclAttribute({
561
+ data: data,
562
+ attrs: attrs
563
+ });
564
+ },
565
+ handleUrlJoinParams(res, flag = true) {
566
+ let url = res.url;
567
+ if (flag) {
568
+ if (res.method) {
569
+ this.submit = {
570
+ id: res.id,
571
+ url: url,
572
+ method: typeof res.method === 'boolean' ? 'submit' : res.method
573
+ };
574
+ }
575
+ }
576
+ let param = util.extend(
577
+ {},
578
+ { id: this.businessId, appId: this.taskExamineAppId },
579
+ res.param || {}
580
+ );
581
+ return util.urlJoinParams({ url, param });
582
+ },
583
+ handleBefore(active, old) {
584
+ return new Promise((resolve, reject) => {
585
+ let n = parseInt(active, 10);
586
+ let item = this.tabs[n];
587
+ let url = null;
588
+ let name = item.name;
589
+ let width = 0;
590
+ let height = 0;
591
+ width = util.win.screen.availWidth - 10;
592
+ height = util.win.screen.availHeight - 60;
593
+ if (item.url) {
594
+ url = this.handleUrlJoinParams(item);
595
+ }
596
+ if (
597
+ item.contents &&
598
+ item.contents.type === 'iframe' &&
599
+ item.contents.blank
600
+ ) {
601
+ item.contents.name && (name = item.contents.name);
602
+ url = this.handleUrlJoinParams(item.contents);
603
+ }
604
+ if (url) {
605
+ reject();
606
+ util.win.open(
607
+ url,
608
+ name,
609
+ `width=${width}px,height=${height}px,resizable=yes,status=yes,menubar=no,scrollbars=yes`
610
+ );
611
+ } else {
612
+ resolve();
613
+ }
614
+ });
615
+ },
616
+ handleSubmit(res) {
617
+ if (this.submit) {
618
+ if (this.submit.id) {
619
+ let iframe = document.getElementById(this.submit.id); //先找到ifram
620
+
621
+ if (this.submit.url) {
622
+ let url = new URL(this.submit.url);
623
+ let origin = url.origin;
624
+ let _origin = util.win.location.origin;
625
+ if (origin != _origin) {
626
+ iframe.contentWindow.postMessage({ submit: res }, '*');
627
+ return new Promise((resolve, reject) => {
628
+ window.addEventListener('message', function (obj) {
629
+ if (obj.origin == origin) {
630
+ let results = obj.data;
631
+ if (results.code == 0) {
632
+ resolve();
633
+ } else {
634
+ reject();
635
+ }
636
+ }
637
+ });
638
+ });
639
+ }
640
+ }
641
+ return iframe.contentWindow[this.submit.method](res); //用dom对象调用子页面的方法
642
+ }
643
+ }
644
+ let esFlowForm = this.formRefs
645
+ ? this.$refs[this.formRefs]
646
+ : this.$refs.esFlowForm;
647
+ if (Array.isArray(esFlowForm)) {
648
+ esFlowForm = esFlowForm[0];
649
+ }
650
+ esFlowForm;
651
+ this.showMsg = res == 1 ? false : true;
652
+
653
+ if (this.otherValidate) {
654
+ return new Promise((resolve, reject) => {
655
+ esFlowForm
656
+ .submitData(undefined, false, res, res === 1)
657
+ .then(() => {
658
+ // 如果submitData验证通过,则执行otherValidate验证
659
+ this.otherValidate(resolve, reject);
660
+ })
661
+ .catch((error) => {
662
+ // 处理submitData可能抛出的错误
663
+ reject(error);
664
+ });
665
+ });
666
+ }
667
+ return esFlowForm.submitData(undefined, false, res, res === 1);
668
+ },
669
+ handleTaskRead(res) {
670
+ if (res.data.taskExamine && res.data.taskExamine.appId) {
671
+ this.taskExamineAppId = res.data.taskExamine.appId;
672
+ this.injector &&
673
+ this.injector.handleChangeData({ appId: this.taskExamineAppId });
674
+ }
675
+ },
676
+ handleEndMessageChange(val) {
677
+ this.$emit('endMessageChange', val);
678
+ },
679
+ handleSuccess() {
680
+ let windowOpenConfig = sessionStorage.getItem('windowOpenConfig');
681
+ if (this.closeWindow && windowOpenConfig) {
682
+ util.busEmit(this, {
683
+ method: 'windowClose',
684
+ ...JSON.parse(windowOpenConfig)
685
+ });
686
+ try {
687
+ const topWin = util.getWinTop();
688
+ topWin.windowClose(JSON.parse(windowOpenConfig));
689
+ } catch (error) {
690
+ console.warn('Failed to call windowClose:', error);
691
+ }
692
+ } else if (this.closeDialog && this.esDialog) {
693
+ this.esDialog.handleClose();
694
+ } else {
695
+ try {
696
+ const topWin = util.getWinTop();
697
+ if (topWin.COOS_SDK) {
698
+ topWin.COOS_SDK.closePopup && topWin.COOS_SDK.closePopup();
699
+ } else if (topWin.opener) {
700
+ topWin.close();
701
+ }
702
+ } catch (error) {
703
+ console.warn('Failed to close window/popup:', error);
704
+ }
705
+ }
706
+ if (this.events && this.events.success) {
707
+ this.events.success();
708
+ }
709
+ this.$emit('success');
710
+ },
711
+ handleSave(id, event) {
712
+ let windowOpenConfig = sessionStorage.getItem('windowOpenConfig');
713
+ if (this.closeWindow && windowOpenConfig) {
714
+ util.busEmit(this, {
715
+ method: 'windowClose',
716
+ ...JSON.parse(windowOpenConfig)
717
+ });
718
+ try {
719
+ const topWin = util.getWinTop();
720
+ topWin.windowClose(JSON.parse(windowOpenConfig));
721
+ } catch (error) {
722
+ console.warn('Failed to call windowClose:', error);
723
+ }
724
+ } else if (this.closeDialog && this.esDialog) {
725
+ this.esDialog.handleClose();
726
+ } else {
727
+ try {
728
+ const topWin = util.getWinTop();
729
+ if (topWin.COOS_SDK) {
730
+ topWin.COOS_SDK.closePopup && topWin.COOS_SDK.closePopup();
731
+ } else if (topWin.opener) {
732
+ topWin.close();
733
+ }
734
+ } catch (error) {
735
+ console.warn('Failed to close window/popup:', error);
736
+ }
737
+ }
738
+ this.events && this.events.save(id, event);
739
+ this.$emit('save', id, event);
740
+ },
741
+ handleChangeId(id) {
742
+ this.businessId = id;
743
+ },
744
+ handleChangeData(res) {
745
+ this.$emit('changeData', res);
746
+ this.$emit('change-data', res);
747
+ }
748
+ }
749
+ };
750
+ </script>