firefly-portal-web 1.0.0

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 (354) hide show
  1. package/README.md +132 -0
  2. package/dist-lib/Empower-789f2826.mjs +94 -0
  3. package/dist-lib/Empower-789f2826.mjs.map +1 -0
  4. package/dist-lib/Empower.vue_vue_type_script_setup_true_lang-c454e7a0.mjs +134 -0
  5. package/dist-lib/Empower.vue_vue_type_script_setup_true_lang-c454e7a0.mjs.map +1 -0
  6. package/dist-lib/Field-40d74a96.mjs +94 -0
  7. package/dist-lib/Field-40d74a96.mjs.map +1 -0
  8. package/dist-lib/Field.vue_vue_type_script_setup_true_lang-e1964a74.mjs +148 -0
  9. package/dist-lib/Field.vue_vue_type_script_setup_true_lang-e1964a74.mjs.map +1 -0
  10. package/dist-lib/FieldForm-a5d4038b.mjs +93 -0
  11. package/dist-lib/FieldForm-a5d4038b.mjs.map +1 -0
  12. package/dist-lib/FieldForm.vue_vue_type_script_setup_true_lang-f92c7e23.mjs +160 -0
  13. package/dist-lib/FieldForm.vue_vue_type_script_setup_true_lang-f92c7e23.mjs.map +1 -0
  14. package/dist-lib/Form-06ee1b64.mjs +97 -0
  15. package/dist-lib/Form-06ee1b64.mjs.map +1 -0
  16. package/dist-lib/Form-15a7f801.mjs +95 -0
  17. package/dist-lib/Form-15a7f801.mjs.map +1 -0
  18. package/dist-lib/Form-465fe45d.mjs +237 -0
  19. package/dist-lib/Form-465fe45d.mjs.map +1 -0
  20. package/dist-lib/Form-6e6a6a0d.mjs +94 -0
  21. package/dist-lib/Form-6e6a6a0d.mjs.map +1 -0
  22. package/dist-lib/Form-a61f1446.mjs +93 -0
  23. package/dist-lib/Form-a61f1446.mjs.map +1 -0
  24. package/dist-lib/Form-aeafea39.mjs +93 -0
  25. package/dist-lib/Form-aeafea39.mjs.map +1 -0
  26. package/dist-lib/Form-b0b8b1f3.mjs +94 -0
  27. package/dist-lib/Form-b0b8b1f3.mjs.map +1 -0
  28. package/dist-lib/Form-b2915cd3.mjs +95 -0
  29. package/dist-lib/Form-b2915cd3.mjs.map +1 -0
  30. package/dist-lib/Form-b2ce5535.mjs +93 -0
  31. package/dist-lib/Form-b2ce5535.mjs.map +1 -0
  32. package/dist-lib/Form-ca6e92bd.mjs +421 -0
  33. package/dist-lib/Form-ca6e92bd.mjs.map +1 -0
  34. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-039f5c88.mjs +101 -0
  35. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-039f5c88.mjs.map +1 -0
  36. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-1883a047.mjs +91 -0
  37. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-1883a047.mjs.map +1 -0
  38. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-5fbc0f96.mjs +302 -0
  39. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-5fbc0f96.mjs.map +1 -0
  40. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-61497691.mjs +181 -0
  41. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-61497691.mjs.map +1 -0
  42. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-69cc4bfc.mjs +94 -0
  43. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-69cc4bfc.mjs.map +1 -0
  44. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-a3d7f865.mjs +263 -0
  45. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-a3d7f865.mjs.map +1 -0
  46. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-ae83b1bb.mjs +104 -0
  47. package/dist-lib/Form.vue_vue_type_script_setup_true_lang-ae83b1bb.mjs.map +1 -0
  48. package/dist-lib/Form.vue_vue_type_style_index_0_lang-f240a568.mjs +838 -0
  49. package/dist-lib/Form.vue_vue_type_style_index_0_lang-f240a568.mjs.map +1 -0
  50. package/dist-lib/Info-e9cb4268.mjs +747 -0
  51. package/dist-lib/Info-e9cb4268.mjs.map +1 -0
  52. package/dist-lib/Log-b1cc7014.mjs +94 -0
  53. package/dist-lib/Log-b1cc7014.mjs.map +1 -0
  54. package/dist-lib/Log.vue_vue_type_script_setup_true_lang-0ba0615b.mjs +93 -0
  55. package/dist-lib/Log.vue_vue_type_script_setup_true_lang-0ba0615b.mjs.map +1 -0
  56. package/dist-lib/Login-fc04d844.mjs +109 -0
  57. package/dist-lib/Login-fc04d844.mjs.map +1 -0
  58. package/dist-lib/LoginForm-eafdf0bc.mjs +93 -0
  59. package/dist-lib/LoginForm-eafdf0bc.mjs.map +1 -0
  60. package/dist-lib/LoginForm.vue_vue_type_script_setup_true_lang-2a241386.mjs +202 -0
  61. package/dist-lib/LoginForm.vue_vue_type_script_setup_true_lang-2a241386.mjs.map +1 -0
  62. package/dist-lib/PageExplainModal-efbb4616.mjs +140 -0
  63. package/dist-lib/PageExplainModal-efbb4616.mjs.map +1 -0
  64. package/dist-lib/Preview-531e9361.mjs +93 -0
  65. package/dist-lib/Preview-531e9361.mjs.map +1 -0
  66. package/dist-lib/Preview-6086e84b.mjs +93 -0
  67. package/dist-lib/Preview-6086e84b.mjs.map +1 -0
  68. package/dist-lib/Preview.vue_vue_type_script_setup_true_lang-0013b21d.mjs +137 -0
  69. package/dist-lib/Preview.vue_vue_type_script_setup_true_lang-0013b21d.mjs.map +1 -0
  70. package/dist-lib/Preview.vue_vue_type_script_setup_true_lang-815bfd98.mjs +67 -0
  71. package/dist-lib/Preview.vue_vue_type_script_setup_true_lang-815bfd98.mjs.map +1 -0
  72. package/dist-lib/TableAction-fcabc30c.mjs +114 -0
  73. package/dist-lib/TableAction-fcabc30c.mjs.map +1 -0
  74. package/dist-lib/UserSelect-4e259116.mjs +94 -0
  75. package/dist-lib/UserSelect-4e259116.mjs.map +1 -0
  76. package/dist-lib/UserSelect.vue_vue_type_script_setup_true_lang-aa25c5fc.mjs +282 -0
  77. package/dist-lib/UserSelect.vue_vue_type_script_setup_true_lang-aa25c5fc.mjs.map +1 -0
  78. package/dist-lib/cdn/socials/dingtalk.png +0 -0
  79. package/dist-lib/cdn/socials/feishu.png +0 -0
  80. package/dist-lib/cdn/socials/gitHub.png +0 -0
  81. package/dist-lib/cdn/socials/qq.png +0 -0
  82. package/dist-lib/cdn/socials/wechat_open.png +0 -0
  83. package/dist-lib/cdn/socials/wxWork.png +0 -0
  84. package/dist-lib/commonFields-5ff2332b.mjs +24 -0
  85. package/dist-lib/commonFields-5ff2332b.mjs.map +1 -0
  86. package/dist-lib/css/fonts/ym/iconfont.css +2419 -0
  87. package/dist-lib/css/fonts/ym/iconfont.ttf +0 -0
  88. package/dist-lib/css/fonts/ym/iconfont.woff +0 -0
  89. package/dist-lib/css/fonts/ym/iconfont.woff2 +0 -0
  90. package/dist-lib/css/fonts/ym-custom/iconfont.css +7203 -0
  91. package/dist-lib/css/fonts/ym-custom/iconfont.ttf +0 -0
  92. package/dist-lib/css/fonts/ym-custom/iconfont.woff +0 -0
  93. package/dist-lib/css/fonts/ym-custom/iconfont.woff2 +0 -0
  94. package/dist-lib/css/index.css +135 -0
  95. package/dist-lib/css/print-lock.css +352 -0
  96. package/dist-lib/emtryImg-85b013aa.mjs +5 -0
  97. package/dist-lib/emtryImg-85b013aa.mjs.map +1 -0
  98. package/dist-lib/en_US-6b59f0a7.mjs +774 -0
  99. package/dist-lib/en_US-6b59f0a7.mjs.map +1 -0
  100. package/dist-lib/favicon.ico +0 -0
  101. package/dist-lib/firefly-portal-preview.css +1 -0
  102. package/dist-lib/firefly-portal-preview.d.ts +82 -0
  103. package/dist-lib/firefly-portal-preview.es.js +92 -0
  104. package/dist-lib/firefly-portal-preview.es.js.map +1 -0
  105. package/dist-lib/firefly-portal-preview.umd.js +79 -0
  106. package/dist-lib/firefly-portal-preview.umd.js.map +1 -0
  107. package/dist-lib/formValidate-33d5595a.mjs +68 -0
  108. package/dist-lib/formValidate-33d5595a.mjs.map +1 -0
  109. package/dist-lib/index-1a090e82.mjs +173 -0
  110. package/dist-lib/index-1a090e82.mjs.map +1 -0
  111. package/dist-lib/index-28ba2ea1.mjs +154 -0
  112. package/dist-lib/index-28ba2ea1.mjs.map +1 -0
  113. package/dist-lib/index-29f92d0d.mjs +130 -0
  114. package/dist-lib/index-29f92d0d.mjs.map +1 -0
  115. package/dist-lib/index-2c2c19d4.mjs +160 -0
  116. package/dist-lib/index-2c2c19d4.mjs.map +1 -0
  117. package/dist-lib/index-2f898c1f.mjs +103 -0
  118. package/dist-lib/index-2f898c1f.mjs.map +1 -0
  119. package/dist-lib/index-3462ba0d.mjs +139 -0
  120. package/dist-lib/index-3462ba0d.mjs.map +1 -0
  121. package/dist-lib/index-3ebbb3a9.mjs +97 -0
  122. package/dist-lib/index-3ebbb3a9.mjs.map +1 -0
  123. package/dist-lib/index-436ec82c.mjs +145 -0
  124. package/dist-lib/index-436ec82c.mjs.map +1 -0
  125. package/dist-lib/index-44e8def1.mjs +267 -0
  126. package/dist-lib/index-44e8def1.mjs.map +1 -0
  127. package/dist-lib/index-47596f01.mjs +144 -0
  128. package/dist-lib/index-47596f01.mjs.map +1 -0
  129. package/dist-lib/index-5888a3a4.mjs +226 -0
  130. package/dist-lib/index-5888a3a4.mjs.map +1 -0
  131. package/dist-lib/index-58fb457c.mjs +179 -0
  132. package/dist-lib/index-58fb457c.mjs.map +1 -0
  133. package/dist-lib/index-5b8b1ba9.mjs +119766 -0
  134. package/dist-lib/index-5b8b1ba9.mjs.map +1 -0
  135. package/dist-lib/index-687fd3de.mjs +396 -0
  136. package/dist-lib/index-687fd3de.mjs.map +1 -0
  137. package/dist-lib/index-6eca8dab.mjs +135 -0
  138. package/dist-lib/index-6eca8dab.mjs.map +1 -0
  139. package/dist-lib/index-73df4468.mjs +187 -0
  140. package/dist-lib/index-73df4468.mjs.map +1 -0
  141. package/dist-lib/index-7ae97180.mjs +597 -0
  142. package/dist-lib/index-7ae97180.mjs.map +1 -0
  143. package/dist-lib/index-8374b2f2.mjs +354 -0
  144. package/dist-lib/index-8374b2f2.mjs.map +1 -0
  145. package/dist-lib/index-89a27c27.mjs +255 -0
  146. package/dist-lib/index-89a27c27.mjs.map +1 -0
  147. package/dist-lib/index-9263cd45.mjs +482 -0
  148. package/dist-lib/index-9263cd45.mjs.map +1 -0
  149. package/dist-lib/index-934ca5d0.mjs +93 -0
  150. package/dist-lib/index-934ca5d0.mjs.map +1 -0
  151. package/dist-lib/index-97081729.mjs +269 -0
  152. package/dist-lib/index-97081729.mjs.map +1 -0
  153. package/dist-lib/index-9dec931e.mjs +145 -0
  154. package/dist-lib/index-9dec931e.mjs.map +1 -0
  155. package/dist-lib/index-9fc40c89.mjs +298 -0
  156. package/dist-lib/index-9fc40c89.mjs.map +1 -0
  157. package/dist-lib/index-a57664c9.mjs +204 -0
  158. package/dist-lib/index-a57664c9.mjs.map +1 -0
  159. package/dist-lib/index-a83288bf.mjs +180 -0
  160. package/dist-lib/index-a83288bf.mjs.map +1 -0
  161. package/dist-lib/index-adf15a9e.mjs +392 -0
  162. package/dist-lib/index-adf15a9e.mjs.map +1 -0
  163. package/dist-lib/index-b5b20206.mjs +617 -0
  164. package/dist-lib/index-b5b20206.mjs.map +1 -0
  165. package/dist-lib/index-b6f446cf.mjs +92 -0
  166. package/dist-lib/index-b6f446cf.mjs.map +1 -0
  167. package/dist-lib/index-b9e3947c.mjs +156 -0
  168. package/dist-lib/index-b9e3947c.mjs.map +1 -0
  169. package/dist-lib/index-bde150fa.mjs +261 -0
  170. package/dist-lib/index-bde150fa.mjs.map +1 -0
  171. package/dist-lib/index-be097ef0.mjs +188 -0
  172. package/dist-lib/index-be097ef0.mjs.map +1 -0
  173. package/dist-lib/index-bff033bc.mjs +563 -0
  174. package/dist-lib/index-bff033bc.mjs.map +1 -0
  175. package/dist-lib/index-c4d74c6c.mjs +258 -0
  176. package/dist-lib/index-c4d74c6c.mjs.map +1 -0
  177. package/dist-lib/index-c708e214.mjs +96 -0
  178. package/dist-lib/index-c708e214.mjs.map +1 -0
  179. package/dist-lib/index-d936d570.mjs +191 -0
  180. package/dist-lib/index-d936d570.mjs.map +1 -0
  181. package/dist-lib/index-da857153.mjs +223 -0
  182. package/dist-lib/index-da857153.mjs.map +1 -0
  183. package/dist-lib/index.vue_vue_type_script_setup_true_lang-0eb8f454.mjs +136 -0
  184. package/dist-lib/index.vue_vue_type_script_setup_true_lang-0eb8f454.mjs.map +1 -0
  185. package/dist-lib/index.vue_vue_type_script_setup_true_lang-10a915e2.mjs +137 -0
  186. package/dist-lib/index.vue_vue_type_script_setup_true_lang-10a915e2.mjs.map +1 -0
  187. package/dist-lib/index.vue_vue_type_script_setup_true_lang-570dd942.mjs +131 -0
  188. package/dist-lib/index.vue_vue_type_script_setup_true_lang-570dd942.mjs.map +1 -0
  189. package/dist-lib/interfaceOauth-bb8e782e.mjs +40 -0
  190. package/dist-lib/interfaceOauth-bb8e782e.mjs.map +1 -0
  191. package/dist-lib/preview-e588e33c.mjs +194 -0
  192. package/dist-lib/preview-e588e33c.mjs.map +1 -0
  193. package/dist-lib/resource/emoji/100.gif +0 -0
  194. package/dist-lib/resource/emoji/101.gif +0 -0
  195. package/dist-lib/resource/emoji/102.gif +0 -0
  196. package/dist-lib/resource/emoji/103.gif +0 -0
  197. package/dist-lib/resource/emoji/104.gif +0 -0
  198. package/dist-lib/resource/emoji/105.gif +0 -0
  199. package/dist-lib/resource/emoji/106.gif +0 -0
  200. package/dist-lib/resource/emoji/107.gif +0 -0
  201. package/dist-lib/resource/emoji/108.gif +0 -0
  202. package/dist-lib/resource/emoji/109.gif +0 -0
  203. package/dist-lib/resource/emoji/110.gif +0 -0
  204. package/dist-lib/resource/emoji/111.gif +0 -0
  205. package/dist-lib/resource/emoji/112.gif +0 -0
  206. package/dist-lib/resource/emoji/113.gif +0 -0
  207. package/dist-lib/resource/emoji/114.gif +0 -0
  208. package/dist-lib/resource/emoji/115.gif +0 -0
  209. package/dist-lib/resource/emoji/116.gif +0 -0
  210. package/dist-lib/resource/emoji/117.gif +0 -0
  211. package/dist-lib/resource/emoji/118.gif +0 -0
  212. package/dist-lib/resource/emoji/119.gif +0 -0
  213. package/dist-lib/resource/emoji/120.gif +0 -0
  214. package/dist-lib/resource/emoji/121.gif +0 -0
  215. package/dist-lib/resource/emoji/122.gif +0 -0
  216. package/dist-lib/resource/emoji/123.gif +0 -0
  217. package/dist-lib/resource/emoji/124.gif +0 -0
  218. package/dist-lib/resource/emoji/125.gif +0 -0
  219. package/dist-lib/resource/emoji/126.gif +0 -0
  220. package/dist-lib/resource/emoji/127.gif +0 -0
  221. package/dist-lib/resource/emoji/128.gif +0 -0
  222. package/dist-lib/resource/emoji/129.gif +0 -0
  223. package/dist-lib/resource/emoji/130.gif +0 -0
  224. package/dist-lib/resource/emoji/131.gif +0 -0
  225. package/dist-lib/resource/emoji/132.gif +0 -0
  226. package/dist-lib/resource/emoji/133.gif +0 -0
  227. package/dist-lib/resource/emoji/134.gif +0 -0
  228. package/dist-lib/resource/emoji/135.gif +0 -0
  229. package/dist-lib/resource/emoji/136.gif +0 -0
  230. package/dist-lib/resource/emoji/137.gif +0 -0
  231. package/dist-lib/resource/emoji/138.gif +0 -0
  232. package/dist-lib/resource/emoji/139.gif +0 -0
  233. package/dist-lib/resource/emoji/140.gif +0 -0
  234. package/dist-lib/resource/emoji/141.gif +0 -0
  235. package/dist-lib/resource/emoji/142.gif +0 -0
  236. package/dist-lib/resource/emoji/143.gif +0 -0
  237. package/dist-lib/resource/emoji/144.gif +0 -0
  238. package/dist-lib/resource/emoji/145.gif +0 -0
  239. package/dist-lib/resource/emoji/146.gif +0 -0
  240. package/dist-lib/resource/emoji/147.gif +0 -0
  241. package/dist-lib/resource/emoji/148.gif +0 -0
  242. package/dist-lib/resource/emoji/149.gif +0 -0
  243. package/dist-lib/resource/emoji/150.gif +0 -0
  244. package/dist-lib/resource/emoji/151.gif +0 -0
  245. package/dist-lib/resource/emoji/152.gif +0 -0
  246. package/dist-lib/resource/emoji/153.gif +0 -0
  247. package/dist-lib/resource/emoji/154.gif +0 -0
  248. package/dist-lib/resource/emoji/155.gif +0 -0
  249. package/dist-lib/resource/emoji/156.gif +0 -0
  250. package/dist-lib/resource/emoji/157.gif +0 -0
  251. package/dist-lib/resource/emoji/158.gif +0 -0
  252. package/dist-lib/resource/emoji/159.gif +0 -0
  253. package/dist-lib/resource/emoji/160.gif +0 -0
  254. package/dist-lib/resource/emoji/161.gif +0 -0
  255. package/dist-lib/resource/emoji/162.gif +0 -0
  256. package/dist-lib/resource/emoji/163.gif +0 -0
  257. package/dist-lib/resource/emoji/164.gif +0 -0
  258. package/dist-lib/resource/emoji/165.gif +0 -0
  259. package/dist-lib/resource/emoji/166.gif +0 -0
  260. package/dist-lib/resource/emoji/167.gif +0 -0
  261. package/dist-lib/resource/emoji/168.gif +0 -0
  262. package/dist-lib/resource/emoji/169.gif +0 -0
  263. package/dist-lib/resource/emoji/170.gif +0 -0
  264. package/dist-lib/resource/emoji/171.gif +0 -0
  265. package/dist-lib/resource/emoji/172.gif +0 -0
  266. package/dist-lib/resource/emoji/173.gif +0 -0
  267. package/dist-lib/resource/emoji/174.gif +0 -0
  268. package/dist-lib/resource/emoji/175.gif +0 -0
  269. package/dist-lib/resource/emoji/176.gif +0 -0
  270. package/dist-lib/resource/emoji/177.gif +0 -0
  271. package/dist-lib/resource/emoji/178.gif +0 -0
  272. package/dist-lib/resource/emoji/179.gif +0 -0
  273. package/dist-lib/resource/emoji/180.gif +0 -0
  274. package/dist-lib/resource/emoji/181.gif +0 -0
  275. package/dist-lib/resource/emoji/182.gif +0 -0
  276. package/dist-lib/resource/emoji/183.gif +0 -0
  277. package/dist-lib/resource/emoji/184.gif +0 -0
  278. package/dist-lib/resource/emoji/185.gif +0 -0
  279. package/dist-lib/resource/emoji/186.gif +0 -0
  280. package/dist-lib/resource/emoji/187.gif +0 -0
  281. package/dist-lib/resource/emoji/188.gif +0 -0
  282. package/dist-lib/resource/emoji/189.gif +0 -0
  283. package/dist-lib/resource/emoji/190.gif +0 -0
  284. package/dist-lib/resource/emoji/191.gif +0 -0
  285. package/dist-lib/resource/emoji/192.gif +0 -0
  286. package/dist-lib/resource/emoji/193.gif +0 -0
  287. package/dist-lib/resource/emoji/194.gif +0 -0
  288. package/dist-lib/resource/emoji/195.gif +0 -0
  289. package/dist-lib/resource/emoji/196.gif +0 -0
  290. package/dist-lib/resource/emoji/197.gif +0 -0
  291. package/dist-lib/resource/emoji/198.gif +0 -0
  292. package/dist-lib/resource/emoji/199.gif +0 -0
  293. package/dist-lib/resource/emoji/200.png +0 -0
  294. package/dist-lib/resource/emoji/201.png +0 -0
  295. package/dist-lib/resource/emoji/202.png +0 -0
  296. package/dist-lib/resource/emoji/203.png +0 -0
  297. package/dist-lib/resource/emoji/204.png +0 -0
  298. package/dist-lib/resource/emoji/205.png +0 -0
  299. package/dist-lib/resource/emoji/206.png +0 -0
  300. package/dist-lib/resource/emoji/207.png +0 -0
  301. package/dist-lib/resource/emoji/208.png +0 -0
  302. package/dist-lib/resource/emoji/209.png +0 -0
  303. package/dist-lib/resource/emoji/210.png +0 -0
  304. package/dist-lib/resource/emoji/211.png +0 -0
  305. package/dist-lib/resource/emoji/212.png +0 -0
  306. package/dist-lib/resource/emoji/213.png +0 -0
  307. package/dist-lib/resource/emoji/214.png +0 -0
  308. package/dist-lib/resource/emoji/215.png +0 -0
  309. package/dist-lib/resource/emoji/216.png +0 -0
  310. package/dist-lib/resource/emoji/217.png +0 -0
  311. package/dist-lib/resource/emoji/218.png +0 -0
  312. package/dist-lib/resource/emoji/219.png +0 -0
  313. package/dist-lib/resource/img/logo.png +0 -0
  314. package/dist-lib/resource/img/pwa-192x192.png +0 -0
  315. package/dist-lib/resource/img/pwa-512x512.png +0 -0
  316. package/dist-lib/resource/tinymce/langs/en.js +419 -0
  317. package/dist-lib/resource/tinymce/langs/zh_CN.js +389 -0
  318. package/dist-lib/resource/tinymce/skins/ui/oxide/content.inline.min.css +7 -0
  319. package/dist-lib/resource/tinymce/skins/ui/oxide/content.min.css +7 -0
  320. package/dist-lib/resource/tinymce/skins/ui/oxide/content.mobile.min.css +7 -0
  321. package/dist-lib/resource/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  322. package/dist-lib/resource/tinymce/skins/ui/oxide/skin.min.css +7 -0
  323. package/dist-lib/resource/tinymce/skins/ui/oxide/skin.mobile.min.css +7 -0
  324. package/dist-lib/resource/tinymce/skins/ui/oxide/skin.shadowdom.min.css +7 -0
  325. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/content.inline.min.css +7 -0
  326. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/content.min.css +7 -0
  327. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/content.mobile.min.css +7 -0
  328. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/skin.min.css +7 -0
  329. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/skin.mobile.min.css +7 -0
  330. package/dist-lib/resource/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css +7 -0
  331. package/dist-lib/useCommon-36969e5f.mjs +110 -0
  332. package/dist-lib/useCommon-36969e5f.mjs.map +1 -0
  333. package/dist-lib/useECharts-bb3ba984.mjs +77 -0
  334. package/dist-lib/useECharts-bb3ba984.mjs.map +1 -0
  335. package/dist-lib/useTable-99fc521a.mjs +172 -0
  336. package/dist-lib/useTable-99fc521a.mjs.map +1 -0
  337. package/dist-lib/zh_CN-5eabc04b.mjs +772 -0
  338. package/dist-lib/zh_CN-5eabc04b.mjs.map +1 -0
  339. package/dist-lib/zh_TW-ef5c69c0.mjs +774 -0
  340. package/dist-lib/zh_TW-ef5c69c0.mjs.map +1 -0
  341. package/package.json +247 -0
  342. package/src/components/PortalPreview/__tests__/index.spec.ts +258 -0
  343. package/src/components/PortalPreview/fonts/ym/iconfont.css +2419 -0
  344. package/src/components/PortalPreview/fonts/ym/iconfont.ttf +0 -0
  345. package/src/components/PortalPreview/fonts/ym/iconfont.woff +0 -0
  346. package/src/components/PortalPreview/fonts/ym/iconfont.woff2 +0 -0
  347. package/src/components/PortalPreview/fonts/ym-custom/iconfont.css +7203 -0
  348. package/src/components/PortalPreview/fonts/ym-custom/iconfont.ttf +0 -0
  349. package/src/components/PortalPreview/fonts/ym-custom/iconfont.woff +0 -0
  350. package/src/components/PortalPreview/fonts/ym-custom/iconfont.woff2 +0 -0
  351. package/src/components/PortalPreview/index.ts +31 -0
  352. package/src/components/PortalPreview/index.vue +329 -0
  353. package/src/components/PortalPreview/style/overrides.css +15 -0
  354. package/src/components/PortalPreview/types.ts +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh_TW-ef5c69c0.mjs","sources":["../src/locales/lang/zh_TW.ts"],"sourcesContent":["import antdLocale from 'ant-design-vue/es/locale/zh_TW';\r\nimport zhTWCustomLocale from './zh_TW.json';\r\n\r\n(antdLocale as any).Calendar.timePickerLocale.rangePlaceholder = ['開始時間', '結束時間'];\r\n\r\nexport default {\r\n message: {\r\n ...zhTWCustomLocale,\r\n antdLocale,\r\n },\r\n};\r\n"],"names":["antdLocale","zh_TW","zhTWCustomLocale"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGCA,EAAmB,SAAS,iBAAiB,mBAAmB,CAAC,QAAQ,MAAM;AAEhF,MAAeC,IAAA;AAAA,EACb,SAAS;AAAA,IACP,GAAGC;AAAA,IACH,YAAAF;AAAA,EACF;AACF;"}
package/package.json ADDED
@@ -0,0 +1,247 @@
1
+ {
2
+ "name": "firefly-portal-web",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "author": {
6
+ "name": "karrylee",
7
+ "email": "karrylee@msi.com",
8
+ "url": "https://gitlab.msic.com.cn/firefly-group/firefly-portal-web.git"
9
+ },
10
+ "homepage": "https://gitlab.msic.com.cn/firefly-group/firefly-portal-web.git",
11
+ "scripts": {
12
+ "commit": "czg",
13
+ "bootstrap": "pnpm install --registry=https://registry.npmmirror.com",
14
+ "serve": "npm run dev",
15
+ "dev": "vite --mode native",
16
+ "build": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=8192 vite build --mode development && esno ./build/script/postBuild.ts",
17
+ "build:test": "cross-env NODE_ENV=test NODE_OPTIONS=--max-old-space-size=8192 vite build --mode test && esno ./build/script/postBuild.ts",
18
+ "build:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=8192 vite build --mode production && esno ./build/script/postBuild.ts",
19
+ "build:no-cache": "pnpm clean:cache && npm run build",
20
+ "report": "cross-env REPORT=true npm run build",
21
+ "type:check": "vue-tsc --noEmit --skipLibCheck",
22
+ "preview": "npm run build && vite preview",
23
+ "preview:dist": "vite preview",
24
+ "log": "conventional-changelog -p angular -i CHANGELOG.md -s",
25
+ "clean:cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite",
26
+ "clean:lib": "rimraf node_modules",
27
+ "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,tsx}\" --fix",
28
+ "lint:prettier": "prettier --write \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
29
+ "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
30
+ "lint:lint-staged": "lint-staged",
31
+ "reinstall": "rimraf pnpm-lock.yaml && rimraf package.lock.json && rimraf node_modules && npm run bootstrap",
32
+ "gen:icon": "esno ./build/generate/icon/index.ts",
33
+ "build:lib": "cross-env NODE_ENV=production vite build --mode production --config vite.config.lib.ts"
34
+ },
35
+ "exports": {
36
+ ".": {
37
+ "import": "./dist-lib/firefly-portal-preview.es.js",
38
+ "require": "./dist-lib/firefly-portal-preview.umd.js",
39
+ "types": "./dist-lib/firefly-portal-preview.d.ts"
40
+ },
41
+ "./style": "./dist-lib/firefly-portal-preview.css",
42
+ "./types": "./dist-lib/firefly-portal-preview.d.ts"
43
+ },
44
+ "files": [
45
+ "dist-lib",
46
+ "src/components/PortalPreview"
47
+ ],
48
+ "peerDependencies": {
49
+ "ant-design-vue": "^4.2.3",
50
+ "axios": "^1.4.0",
51
+ "dayjs": "^1.11.7",
52
+ "echarts": "^5.4.2",
53
+ "element-plus": "^2.14.0",
54
+ "firefly-plus-components": "^3.0.45",
55
+ "lodash-es": "^4.17.21",
56
+ "pinia": "^2.1.3",
57
+ "vue": "^3.4.27",
58
+ "vue-router": "^4.3.2"
59
+ },
60
+ "lint-staged": {
61
+ "*.{js,jsx,ts,tsx}": [
62
+ "eslint --fix",
63
+ "prettier --write"
64
+ ],
65
+ "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": [
66
+ "prettier --write--parser json"
67
+ ],
68
+ "package.json": [
69
+ "prettier --write"
70
+ ],
71
+ "*.vue": [
72
+ "eslint --fix",
73
+ "prettier --write",
74
+ "stylelint --fix"
75
+ ],
76
+ "*.{scss,less,styl,html}": [
77
+ "stylelint --fix",
78
+ "prettier --write"
79
+ ],
80
+ "*.md": [
81
+ "prettier --write"
82
+ ]
83
+ },
84
+ "config": {
85
+ "commitizen": {
86
+ "path": "node_modules/cz-git"
87
+ }
88
+ },
89
+ "dependencies": {
90
+ "@amap/amap-jsapi-loader": "^1.0.1",
91
+ "@ant-design/colors": "^7.1.0",
92
+ "@ant-design/icons-vue": "^7.0.1",
93
+ "@element-plus/icons-vue": "^2.3.1",
94
+ "@firefly-plus/icons-vue": "^1.1.40",
95
+ "@fontsource/noto-sans-jp": "^5.2.5",
96
+ "@fontsource/noto-sans-kr": "^5.2.5",
97
+ "@fontsource/noto-sans-sc": "^5.2.6",
98
+ "@fontsource/noto-sans-tc": "^5.2.6",
99
+ "@fullcalendar/core": "^6.1.14",
100
+ "@fullcalendar/daygrid": "^6.1.14",
101
+ "@fullcalendar/interaction": "^6.1.14",
102
+ "@fullcalendar/timegrid": "^6.1.14",
103
+ "@fullcalendar/vue3": "^6.1.14",
104
+ "@iconify/iconify": "^3.1.0",
105
+ "@logicflow/core": "^1.2.1",
106
+ "@logicflow/extension": "^1.2.1",
107
+ "@vue/runtime-core": "^3.4.27",
108
+ "@vue/shared": "^3.4.27",
109
+ "@vueuse/core": "^10.1.2",
110
+ "@vueuse/shared": "^10.1.2",
111
+ "@zxcvbn-ts/core": "^2.2.1",
112
+ "ant-design-vue": "^4.2.3",
113
+ "axios": "^1.4.0",
114
+ "bpmn-js": "16.3.2",
115
+ "bpmn-js-properties-panel": "5.7.0",
116
+ "camunda-bpmn-moddle": "6.1.2",
117
+ "codemirror": "^5.65.12",
118
+ "cron-parser": "^4.8.1",
119
+ "cropperjs": "^1.5.13",
120
+ "crypto-js": "^4.1.1",
121
+ "dayjs": "^1.11.7",
122
+ "diagram-js": "11.9.1",
123
+ "diagram-js-minimap": "4.1.0",
124
+ "echarts": "^5.4.2",
125
+ "echarts-stat": "^1.2.0",
126
+ "element-plus": "^2.14.0",
127
+ "firefly-plus-components": "^3.0.45",
128
+ "inherits-browser": "^0.1.0",
129
+ "intro.js": "^7.0.1",
130
+ "jsbarcode": "^3.11.5",
131
+ "lodash-es": "^4.17.21",
132
+ "min-dash": "^4.2.1",
133
+ "min-dom": "^4.1.0",
134
+ "monaco-editor": "^0.38.0",
135
+ "nprogress": "^0.2.0",
136
+ "path-to-regexp": "^6.2.1",
137
+ "pinia": "^2.1.3",
138
+ "postcss-import": "16.1.0",
139
+ "print-js": "^1.6.0",
140
+ "qrcode": "^1.5.1",
141
+ "qs": "^6.11.1",
142
+ "reconnecting-websocket": "^4.4.0",
143
+ "resize-observer-polyfill": "^1.5.1",
144
+ "showdown": "^2.1.0",
145
+ "sortablejs": "^1.15.0",
146
+ "spark-md5": "^3.0.2",
147
+ "tailwindcss": "3.4.17",
148
+ "terser": "^5.14.2",
149
+ "tiny-svg": "^3.0.1",
150
+ "tinymce": "^5.10.7",
151
+ "uuid": "^11.0.4",
152
+ "v-code-diff": "^1.12.0",
153
+ "vditor": "^3.9.1",
154
+ "vue": "^3.4.27",
155
+ "vue-grid-layout": "^3.0.0-beta1",
156
+ "vue-i18n": "^9.13.1",
157
+ "vue-json-pretty": "^2.2.4",
158
+ "vue-plugin-hiprint": "0.0.57-beta24",
159
+ "vue-router": "^4.3.2",
160
+ "vue-simple-uploader": "1.0.0",
161
+ "vue-types": "^5.1.2",
162
+ "vue3-draggable-resizable": "^1.6.5",
163
+ "vue3-tree-org": "^4.2.2",
164
+ "vuedraggable": "^4.1.0",
165
+ "xlsx": "^0.18.5"
166
+ },
167
+ "devDependencies": {
168
+ "@commitlint/cli": "^17.6.3",
169
+ "@commitlint/config-conventional": "^17.6.3",
170
+ "@iconify/json": "^2.2.43",
171
+ "@purge-icons/generated": "^0.9.0",
172
+ "@rys-fe/vite-plugin-theme": "^0.8.6",
173
+ "@types/codemirror": "^5.60.7",
174
+ "@types/crypto-js": "^4.1.1",
175
+ "@types/fs-extra": "^11.0.1",
176
+ "@types/inquirer": "^8.2.6",
177
+ "@types/intro.js": "^5.1.1",
178
+ "@types/js-cookie": "^3.0.6",
179
+ "@types/lodash-es": "^4.17.7",
180
+ "@types/node": "^18.15.11",
181
+ "@types/nprogress": "^0.2.0",
182
+ "@types/qrcode": "^1.5.0",
183
+ "@types/qs": "^6.9.7",
184
+ "@types/showdown": "^2.0.0",
185
+ "@types/sortablejs": "^1.15.1",
186
+ "@typescript-eslint/eslint-plugin": "^5.57.0",
187
+ "@typescript-eslint/parser": "^5.57.0",
188
+ "@vitejs/plugin-vue": "^4.2.3",
189
+ "@vitejs/plugin-vue-jsx": "^3.0.1",
190
+ "@vue/compiler-sfc": "^3.4.27",
191
+ "@vue/test-utils": "^2.4.5",
192
+ "autoprefixer": "^10.4.14",
193
+ "conventional-changelog-cli": "^2.2.2",
194
+ "cross-env": "^7.0.3",
195
+ "cz-git": "^1.6.1",
196
+ "czg": "^1.6.1",
197
+ "dotenv": "^16.0.3",
198
+ "eslint": "^8.37.0",
199
+ "eslint-config-prettier": "^8.8.0",
200
+ "eslint-plugin-prettier": "^4.2.1",
201
+ "eslint-plugin-vue": "^9.10.0",
202
+ "esno": "^0.16.3",
203
+ "fs-extra": "^11.1.1",
204
+ "happy-dom": "^13.10.1",
205
+ "inquirer": "^9.1.5",
206
+ "jquery": "^3.7.1",
207
+ "js-cookie": "^3.0.5",
208
+ "less": "^4.1.3",
209
+ "lint-staged": "13.2.0",
210
+ "npm-run-all": "^4.1.5",
211
+ "picocolors": "^1.0.0",
212
+ "postcss": "^8.4.21",
213
+ "postcss-html": "^1.5.0",
214
+ "postcss-less": "^6.0.0",
215
+ "prettier": "^2.8.8",
216
+ "rimraf": "^4.4.1",
217
+ "rollup": "^3.7.4",
218
+ "rollup-plugin-visualizer": "^5.9.0",
219
+ "stylelint": "^15.4.0",
220
+ "stylelint-config-prettier": "^9.0.3",
221
+ "stylelint-config-recommended": "^11.0.0",
222
+ "stylelint-config-recommended-vue": "^1.4.0",
223
+ "stylelint-config-standard": "^32.0.0",
224
+ "stylelint-order": "^6.0.3",
225
+ "ts-node": "^10.9.1",
226
+ "typescript": "^5.4.5",
227
+ "vite": "^4.5.3",
228
+ "vite-plugin-cdn-import": "^0.3.5",
229
+ "vite-plugin-compression": "^0.5.1",
230
+ "vite-plugin-html": "^3.2.0",
231
+ "vite-plugin-mkcert": "^1.10.1",
232
+ "vite-plugin-purge-icons": "^0.9.2",
233
+ "vite-plugin-pwa": "^0.14.0",
234
+ "vite-plugin-style-import": "^2.0.0",
235
+ "vite-plugin-svg-icons": "^2.0.1",
236
+ "vite-plugin-vue-inspector": "^5.3.1",
237
+ "vite-plugin-vue-setup-extend": "^0.4.0",
238
+ "vite-plugin-windicss": "1.8.10",
239
+ "vitest": "^1.6.1",
240
+ "vue-eslint-parser": "^9.1.1",
241
+ "vue-tsc": "^2.0.19"
242
+ },
243
+ "engines": {
244
+ "node": ">=16.15.0",
245
+ "pnpm": ">=8.1.0"
246
+ }
247
+ }
@@ -0,0 +1,258 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach, nextTick } from 'vitest';
2
+ import { mount } from '@vue/test-utils';
3
+
4
+ // Hoisted mock functions - must be defined before vi.mock calls
5
+ const mockGetWorkbench = vi.hoisted(() => vi.fn());
6
+ const mockGetAdminWorkbench = vi.hoisted(() => vi.fn());
7
+ const mockGetPageHome = vi.hoisted(() => vi.fn());
8
+ const mockPortalAccessRecordAdd = vi.hoisted(() => vi.fn());
9
+
10
+ // Mock child components
11
+ vi.mock('@/components/VisualPortal/Design/index.vue', () => ({
12
+ default: {
13
+ name: 'PortalDesign',
14
+ template: '<div class="portal-design-mock" />',
15
+ },
16
+ }));
17
+
18
+ vi.mock('@/components/VisualPortal/Design/components/Preview.vue', () => ({
19
+ default: {
20
+ name: 'Preview',
21
+ template: '<div class="preview-mock" />',
22
+ props: ['isHome'],
23
+ },
24
+ }));
25
+
26
+ vi.mock('@/components/CommonModal', () => ({
27
+ PreviewModal: {
28
+ name: 'PreviewModal',
29
+ template: '<div class="preview-modal-mock" />',
30
+ },
31
+ }));
32
+
33
+ // Mock useModal composable - returns [registerFn, { openModal }]
34
+ vi.mock('@/components/Modal', () => ({
35
+ useModal: () => [vi.fn(), { openModal: vi.fn() }],
36
+ }));
37
+
38
+ // Mock API module
39
+ vi.mock('@/api/newApi/newApi', () => ({
40
+ getPageHome: mockGetPageHome,
41
+ getWorkbench: mockGetWorkbench,
42
+ getAdminWorkbench: mockGetAdminWorkbench,
43
+ portalAccessRecordAdd: mockPortalAccessRecordAdd,
44
+ }));
45
+
46
+ // Import component AFTER mocks are set up
47
+ import PortalPreview from '@/components/PortalPreview/index.vue';
48
+
49
+ /**
50
+ * Helper to flush pending microtasks/promises
51
+ */
52
+ function flushPromises() {
53
+ return new Promise((resolve) => setTimeout(resolve, 0));
54
+ }
55
+
56
+ describe('PortalPreview', () => {
57
+ let wrapper: ReturnType<typeof mount>;
58
+
59
+ beforeEach(() => {
60
+ vi.clearAllMocks();
61
+ // Default mock implementations
62
+ mockGetWorkbench.mockResolvedValue({ data: {} });
63
+ mockGetAdminWorkbench.mockResolvedValue({ data: {} });
64
+ mockGetPageHome.mockResolvedValue({ data: {} });
65
+ mockPortalAccessRecordAdd.mockResolvedValue({ data: {} });
66
+ });
67
+
68
+ afterEach(() => {
69
+ if (wrapper) {
70
+ wrapper.unmount();
71
+ }
72
+ vi.restoreAllMocks();
73
+ });
74
+
75
+ describe('rendering', () => {
76
+ it('should render without errors', () => {
77
+ wrapper = mount(PortalPreview, {});
78
+ expect(wrapper.exists()).toBe(true);
79
+ });
80
+
81
+ it('should render child components', () => {
82
+ wrapper = mount(PortalPreview, {});
83
+ expect(wrapper.find('.portal-design-mock').exists()).toBe(true);
84
+ expect(wrapper.find('.preview-mock').exists()).toBe(true);
85
+ expect(wrapper.find('.preview-modal-mock').exists()).toBe(true);
86
+ });
87
+ });
88
+
89
+ describe('props', () => {
90
+ it('should use data prop directly when provided and emit load', async () => {
91
+ const testData = { layout: [], formData: '{"key":"value"}' };
92
+ wrapper = mount(PortalPreview, {
93
+ props: { data: testData },
94
+ });
95
+
96
+ await nextTick();
97
+ expect(wrapper.emitted('load')).toBeTruthy();
98
+ expect(wrapper.emitted('load')![0][0]).toEqual(testData);
99
+ });
100
+
101
+ it('should reflect isPreviewMode prop through computed isHome', async () => {
102
+ wrapper = mount(PortalPreview, {
103
+ props: { isPreviewMode: true },
104
+ });
105
+ await nextTick();
106
+ const previewComponent = wrapper.findComponent({ name: 'Preview' });
107
+ expect(previewComponent.props('isHome')).toBe(true);
108
+ });
109
+
110
+ it('should pass isHome=false when isPreviewMode is false', async () => {
111
+ wrapper = mount(PortalPreview, {
112
+ props: { isPreviewMode: false },
113
+ });
114
+ await nextTick();
115
+ const previewComponent = wrapper.findComponent({ name: 'Preview' });
116
+ expect(previewComponent.props('isHome')).toBe(false);
117
+ });
118
+ });
119
+
120
+ describe('events', () => {
121
+ it('should emit load event with parsed data when API returns formData', async () => {
122
+ const testData = { layout: [{ component: 'HText' }] };
123
+ // parseFormData expects: data.formData -> JSON.parse -> { formData: parsedData }
124
+ mockGetWorkbench.mockResolvedValue({
125
+ data: { formData: JSON.stringify({ formData: testData }) },
126
+ });
127
+
128
+ wrapper = mount(PortalPreview, {});
129
+ await nextTick();
130
+ await flushPromises();
131
+ await flushPromises();
132
+
133
+ expect(mockGetWorkbench).toHaveBeenCalled();
134
+ expect(wrapper.emitted('load')).toBeTruthy();
135
+ const loadData = wrapper.emitted('load')![0][0] as any;
136
+ expect(loadData.layout).toEqual(testData.layout);
137
+ });
138
+
139
+ it('should emit error event when getWorkbench fails', async () => {
140
+ mockGetWorkbench.mockRejectedValue(new Error('API Error'));
141
+
142
+ wrapper = mount(PortalPreview, {});
143
+ await nextTick();
144
+ await flushPromises();
145
+
146
+ expect(wrapper.emitted('error')).toBeTruthy();
147
+ const errorArg = wrapper.emitted('error')![0][0] as Error;
148
+ expect(errorArg.message).toBe('API Error');
149
+ });
150
+
151
+ it('should not emit reload without child interaction', async () => {
152
+ wrapper = mount(PortalPreview, {
153
+ props: { data: { layout: [] } },
154
+ });
155
+ await nextTick();
156
+ expect(wrapper.emitted('reload')).toBeUndefined();
157
+ });
158
+ });
159
+
160
+ describe('collectData prop', () => {
161
+ it('should not call portalAccessRecordAdd when collectData is false', async () => {
162
+ wrapper = mount(PortalPreview, {
163
+ props: { collectData: false },
164
+ });
165
+ await nextTick();
166
+ await flushPromises();
167
+ expect(mockPortalAccessRecordAdd).not.toHaveBeenCalled();
168
+ });
169
+
170
+ it('should call portalAccessRecordAdd when collectData is true', async () => {
171
+ wrapper = mount(PortalPreview, {
172
+ props: { collectData: true },
173
+ });
174
+ await nextTick();
175
+ await flushPromises();
176
+ expect(mockPortalAccessRecordAdd).toHaveBeenCalled();
177
+ });
178
+ });
179
+
180
+ describe('listenMessage prop', () => {
181
+ it('should add message event listener when listenMessage is true', () => {
182
+ const addSpy = vi.spyOn(window, 'addEventListener');
183
+ wrapper = mount(PortalPreview, {
184
+ props: { listenMessage: true },
185
+ });
186
+ expect(addSpy).toHaveBeenCalledWith('message', expect.any(Function), false);
187
+ });
188
+
189
+ it('should not add message event listener when listenMessage is false', () => {
190
+ const addSpy = vi.spyOn(window, 'addEventListener');
191
+ wrapper = mount(PortalPreview, {
192
+ props: { listenMessage: false },
193
+ });
194
+ expect(addSpy).not.toHaveBeenCalledWith('message', expect.any(Function), false);
195
+ });
196
+
197
+ it('should remove message event listener on unmount when listenMessage was true', () => {
198
+ const removeSpy = vi.spyOn(window, 'removeEventListener');
199
+ wrapper = mount(PortalPreview, {
200
+ props: { listenMessage: true },
201
+ });
202
+ wrapper.unmount();
203
+ expect(removeSpy).toHaveBeenCalledWith('message', expect.any(Function), false);
204
+ });
205
+
206
+ it('should ignore messages when listenMessage is false (no errors)', async () => {
207
+ wrapper = mount(PortalPreview, {
208
+ props: { listenMessage: false },
209
+ });
210
+ await nextTick();
211
+
212
+ const messageEvent = new MessageEvent('message', {
213
+ data: {
214
+ type: 'msic',
215
+ data: JSON.stringify({ isRefresh: true }),
216
+ },
217
+ });
218
+ expect(() => window.dispatchEvent(messageEvent)).not.toThrow();
219
+ });
220
+ });
221
+
222
+ describe('data prop watcher', () => {
223
+ it('should emit load when data prop changes', async () => {
224
+ wrapper = mount(PortalPreview, {
225
+ props: { data: undefined },
226
+ });
227
+
228
+ // Wait for onMounted -> initData -> getWorkbench resolution
229
+ await flushPromises();
230
+ await flushPromises();
231
+
232
+ const newData = { layout: [{ component: 'HText' }] };
233
+ await wrapper.setProps({ data: newData });
234
+ await nextTick();
235
+ await flushPromises();
236
+
237
+ const loadEvents = wrapper.emitted('load');
238
+ expect(loadEvents).toBeTruthy();
239
+ const lastEvent = loadEvents![loadEvents!.length - 1][0];
240
+ expect(lastEvent).toEqual(newData);
241
+ });
242
+ });
243
+
244
+ describe('fallbackRedirect prop', () => {
245
+ it('should not redirect on error when fallbackRedirect is empty', async () => {
246
+ mockGetWorkbench.mockRejectedValue(new Error('API Error'));
247
+ const openSpy = vi.spyOn(window, 'open');
248
+
249
+ wrapper = mount(PortalPreview, {
250
+ props: { fallbackRedirect: '' },
251
+ });
252
+ await nextTick();
253
+ await flushPromises();
254
+
255
+ expect(openSpy).not.toHaveBeenCalled();
256
+ });
257
+ });
258
+ });