@maketribe/ms-app 4.0.7 → 4.0.9

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 (252) hide show
  1. package/dist/cjs/{404-BrOO946Y.cjs → 404-BPEClOTg.cjs} +2 -2
  2. package/dist/cjs/{404-BrOO946Y.cjs.map → 404-BPEClOTg.cjs.map} +1 -1
  3. package/dist/cjs/{Editor-Cn2kyYJI.cjs → Editor-Dm6iVXqg.cjs} +3 -3
  4. package/dist/cjs/{Editor-Cn2kyYJI.cjs.map → Editor-Dm6iVXqg.cjs.map} +1 -1
  5. package/dist/cjs/Editor-UijVew0S.cjs.map +1 -1
  6. package/dist/cjs/{Editor-B-0M2sL3.cjs → Editor-r0C51uF9.cjs} +2 -2
  7. package/dist/cjs/{Editor-B-0M2sL3.cjs.map → Editor-r0C51uF9.cjs.map} +1 -1
  8. package/dist/cjs/{PermissionManage-mpEUhGB1.cjs → PermissionManage-C7Xg-wii.cjs} +4 -5
  9. package/dist/cjs/{PermissionManage-mpEUhGB1.cjs.map → PermissionManage-C7Xg-wii.cjs.map} +1 -1
  10. package/dist/cjs/{ResourceSelectInput-DE4Qst5X.cjs → ResourceSelectInput-CwlmTqbd.cjs} +2 -2
  11. package/dist/cjs/ResourceSelectInput-CwlmTqbd.cjs.map +1 -0
  12. package/dist/cjs/{dialog-Cb8wTzwE.cjs → dialog-Cvm2-doC.cjs} +2 -2
  13. package/dist/cjs/{dialog-Cb8wTzwE.cjs.map → dialog-Cvm2-doC.cjs.map} +1 -1
  14. package/dist/cjs/{dialog-CI8Z6by3.cjs → dialog-DMcs6fRc.cjs} +2 -2
  15. package/dist/cjs/{dialog-CI8Z6by3.cjs.map → dialog-DMcs6fRc.cjs.map} +1 -1
  16. package/dist/cjs/{dialog-ZeOPayng.cjs → dialog-DNfS8tGa.cjs} +2 -2
  17. package/dist/cjs/{dialog-ZeOPayng.cjs.map → dialog-DNfS8tGa.cjs.map} +1 -1
  18. package/dist/cjs/{edit-BUmPAJKU.cjs → edit-DJ4DPrce.cjs} +4 -5
  19. package/dist/cjs/{edit-BUmPAJKU.cjs.map → edit-DJ4DPrce.cjs.map} +1 -1
  20. package/dist/cjs/index-1agV8Gnh.cjs.map +1 -1
  21. package/dist/cjs/{index-BybWaDYx.cjs → index-B4ZWoHMl.cjs} +4 -6
  22. package/dist/cjs/{index-BybWaDYx.cjs.map → index-B4ZWoHMl.cjs.map} +1 -1
  23. package/dist/cjs/{index-tSPM88jH.cjs → index-B6GntGqH.cjs} +4 -4
  24. package/dist/cjs/{index-tSPM88jH.cjs.map → index-B6GntGqH.cjs.map} +1 -1
  25. package/dist/cjs/{index-CQ7eZdx4.cjs → index-B9rw_5us.cjs} +3 -4
  26. package/dist/cjs/{index-CQ7eZdx4.cjs.map → index-B9rw_5us.cjs.map} +1 -1
  27. package/dist/cjs/{index-Cw3dD4U-.cjs → index-BAbHrjt0.cjs} +2 -2
  28. package/dist/cjs/{index-Cw3dD4U-.cjs.map → index-BAbHrjt0.cjs.map} +1 -1
  29. package/dist/cjs/{index-ZHU2ZXBm.cjs → index-BC2an1Uu.cjs} +2 -2
  30. package/dist/cjs/{index-ZHU2ZXBm.cjs.map → index-BC2an1Uu.cjs.map} +1 -1
  31. package/dist/cjs/{index-ejRYnXoW.cjs → index-BCw3a06g.cjs} +10 -11
  32. package/dist/cjs/index-BCw3a06g.cjs.map +1 -0
  33. package/dist/cjs/{index-D0QoF5bD.cjs → index-BI4quwn5.cjs} +3 -4
  34. package/dist/cjs/{index-D0QoF5bD.cjs.map → index-BI4quwn5.cjs.map} +1 -1
  35. package/dist/cjs/{index-BNC2Y5bC.cjs → index-BUCV8-xD.cjs} +890 -1128
  36. package/dist/cjs/index-BUCV8-xD.cjs.map +1 -0
  37. package/dist/cjs/{index-B-F54DSb.cjs → index-BbTdkhEQ.cjs} +2 -2
  38. package/dist/cjs/{index-B-F54DSb.cjs.map → index-BbTdkhEQ.cjs.map} +1 -1
  39. package/dist/cjs/{index-BYuiQ9BW.cjs → index-C3g5CFYi.cjs} +3 -3
  40. package/dist/cjs/{index-BYuiQ9BW.cjs.map → index-C3g5CFYi.cjs.map} +1 -1
  41. package/dist/cjs/{index-C2CjifJI.cjs → index-C8QLFii6.cjs} +3 -3
  42. package/dist/cjs/{index-C2CjifJI.cjs.map → index-C8QLFii6.cjs.map} +1 -1
  43. package/dist/cjs/index-CZGf6tYf.cjs.map +1 -1
  44. package/dist/cjs/{index-BRK2tsT2.cjs → index-C_-dvvOO.cjs} +17 -32
  45. package/dist/cjs/{index-BRK2tsT2.cjs.map → index-C_-dvvOO.cjs.map} +1 -1
  46. package/dist/cjs/{index-yxoZBsyr.cjs → index-CgnYqmo9.cjs} +3 -3
  47. package/dist/cjs/{index-yxoZBsyr.cjs.map → index-CgnYqmo9.cjs.map} +1 -1
  48. package/dist/cjs/index-Cj3GY0CU.cjs.map +1 -1
  49. package/dist/cjs/{index-BSTG0iOp.cjs → index-CpROwYqz.cjs} +2 -2
  50. package/dist/cjs/{index-BSTG0iOp.cjs.map → index-CpROwYqz.cjs.map} +1 -1
  51. package/dist/cjs/{index-BROr1jy1.cjs → index-CrMSJRSa.cjs} +2 -2
  52. package/dist/cjs/{index-BROr1jy1.cjs.map → index-CrMSJRSa.cjs.map} +1 -1
  53. package/dist/cjs/{index-C5fJA1lV.cjs → index-Cz456tw_.cjs} +2 -2
  54. package/dist/cjs/{index-C5fJA1lV.cjs.map → index-Cz456tw_.cjs.map} +1 -1
  55. package/dist/cjs/{index-Sj0Y5AbR.cjs → index-D7f3Rl6k.cjs} +3 -3
  56. package/dist/cjs/{index-Sj0Y5AbR.cjs.map → index-D7f3Rl6k.cjs.map} +1 -1
  57. package/dist/cjs/index-D9rm8vzi.cjs.map +1 -1
  58. package/dist/cjs/{index-CSCC0-hX.cjs → index-DAFPSj10.cjs} +3 -3
  59. package/dist/cjs/{index-CSCC0-hX.cjs.map → index-DAFPSj10.cjs.map} +1 -1
  60. package/dist/cjs/{index-CwD-1sTs.cjs → index-DU1N0l6j.cjs} +2 -2
  61. package/dist/cjs/{index-CwD-1sTs.cjs.map → index-DU1N0l6j.cjs.map} +1 -1
  62. package/dist/cjs/{index-BozjwRvF.cjs → index-DXasMfCq.cjs} +5 -8
  63. package/dist/cjs/{index-BozjwRvF.cjs.map → index-DXasMfCq.cjs.map} +1 -1
  64. package/dist/cjs/{index-D-CHh2P4.cjs → index-DZUlc_v7.cjs} +2 -2
  65. package/dist/cjs/index-DZUlc_v7.cjs.map +1 -0
  66. package/dist/cjs/index-D_CB0k2e.cjs.map +1 -1
  67. package/dist/cjs/{index-Dorrdxn2.cjs → index-DdcsqstF.cjs} +2 -2
  68. package/dist/cjs/{index-Dorrdxn2.cjs.map → index-DdcsqstF.cjs.map} +1 -1
  69. package/dist/cjs/{index-C-4u00mH.cjs → index-DhYT_qm1.cjs} +6 -11
  70. package/dist/cjs/{index-C-4u00mH.cjs.map → index-DhYT_qm1.cjs.map} +1 -1
  71. package/dist/cjs/{index-CCYsxxsJ.cjs → index-Dsq6ODhZ.cjs} +2 -2
  72. package/dist/cjs/{index-CCYsxxsJ.cjs.map → index-Dsq6ODhZ.cjs.map} +1 -1
  73. package/dist/cjs/{index-F3sF1nOn.cjs → index-DwvlZC6R.cjs} +2 -2
  74. package/dist/cjs/{index-F3sF1nOn.cjs.map → index-DwvlZC6R.cjs.map} +1 -1
  75. package/dist/cjs/index-RjnvS-h4.cjs.map +1 -1
  76. package/dist/cjs/{index-Cf8DTE1L.cjs → index-WOD9EhUR.cjs} +2 -2
  77. package/dist/cjs/{index-Cf8DTE1L.cjs.map → index-WOD9EhUR.cjs.map} +1 -1
  78. package/dist/cjs/{index-JyLxed9d.cjs → index-XCAqvZkT.cjs} +2 -2
  79. package/dist/cjs/index-XCAqvZkT.cjs.map +1 -0
  80. package/dist/cjs/{index-Bn1by57_.cjs → index-i7_EofWw.cjs} +4 -5
  81. package/dist/cjs/{index-Bn1by57_.cjs.map → index-i7_EofWw.cjs.map} +1 -1
  82. package/dist/cjs/{index-DSSgD6DK.cjs → index-q1_p8QOz.cjs} +2 -2
  83. package/dist/cjs/{index-DSSgD6DK.cjs.map → index-q1_p8QOz.cjs.map} +1 -1
  84. package/dist/cjs/index.js +1 -1
  85. package/dist/cjs/{style.css → ms-app.css} +14 -14
  86. package/dist/cjs/{normal-wyPOBYAE.cjs → normal-BwrvpsP7.cjs} +2 -2
  87. package/dist/cjs/{normal-wyPOBYAE.cjs.map → normal-BwrvpsP7.cjs.map} +1 -1
  88. package/dist/cjs/{normal-b4IPtja5.cjs → normal-dqsyELbO.cjs} +2 -2
  89. package/dist/cjs/{normal-b4IPtja5.cjs.map → normal-dqsyELbO.cjs.map} +1 -1
  90. package/dist/cjs/{table-BGthpvL-.cjs → table-DwtI3Z1Y.cjs} +5 -5
  91. package/dist/cjs/{table-BGthpvL-.cjs.map → table-DwtI3Z1Y.cjs.map} +1 -1
  92. package/dist/cjs/use-condition-BsNGbgF4.cjs.map +1 -1
  93. package/dist/esm/{404-DfOf8KEr.js → 404-D-X3EKEl.js} +3 -3
  94. package/dist/esm/{404-DfOf8KEr.js.map → 404-D-X3EKEl.js.map} +1 -1
  95. package/dist/esm/Editor-C6qfKcVi.js.map +1 -1
  96. package/dist/esm/{Editor-io6yY4kQ.js → Editor-CPeJtlen.js} +2 -2
  97. package/dist/esm/{Editor-io6yY4kQ.js.map → Editor-CPeJtlen.js.map} +1 -1
  98. package/dist/esm/{Editor-DBENXvXq.js → Editor-D8ao5xa_.js} +3 -3
  99. package/dist/esm/{Editor-DBENXvXq.js.map → Editor-D8ao5xa_.js.map} +1 -1
  100. package/dist/esm/{PermissionManage-DrtBafJc.js → PermissionManage-Drqh6bZl.js} +6 -7
  101. package/dist/esm/{PermissionManage-DrtBafJc.js.map → PermissionManage-Drqh6bZl.js.map} +1 -1
  102. package/dist/esm/{ResourceSelectInput-DOMBcxMu.js → ResourceSelectInput-Dh1liggt.js} +2 -2
  103. package/dist/esm/{ResourceSelectInput-DOMBcxMu.js.map → ResourceSelectInput-Dh1liggt.js.map} +1 -1
  104. package/dist/esm/{dialog-BdI4XimU.js → dialog-BCUjKmRJ.js} +3 -3
  105. package/dist/esm/{dialog-BdI4XimU.js.map → dialog-BCUjKmRJ.js.map} +1 -1
  106. package/dist/esm/{dialog-3s5_ieqx.js → dialog-Dfw2Hyma.js} +3 -3
  107. package/dist/esm/{dialog-3s5_ieqx.js.map → dialog-Dfw2Hyma.js.map} +1 -1
  108. package/dist/esm/{dialog-j_yGtIZ7.js → dialog-Dx1_PByu.js} +3 -3
  109. package/dist/esm/{dialog-j_yGtIZ7.js.map → dialog-Dx1_PByu.js.map} +1 -1
  110. package/dist/esm/{edit-DGLJIgoZ.js → edit-CL9ew0K5.js} +5 -6
  111. package/dist/esm/{edit-DGLJIgoZ.js.map → edit-CL9ew0K5.js.map} +1 -1
  112. package/dist/esm/{index-B6LEaKnh.js → index-8_tegZTS.js} +3 -3
  113. package/dist/esm/{index-B6LEaKnh.js.map → index-8_tegZTS.js.map} +1 -1
  114. package/dist/esm/{index-CZ0GujBv.js → index-9xY--M0f.js} +3 -3
  115. package/dist/esm/index-9xY--M0f.js.map +1 -0
  116. package/dist/esm/{index-DqGUsw-a.js → index-B-aUha22.js} +898 -1136
  117. package/dist/esm/index-B-aUha22.js.map +1 -0
  118. package/dist/esm/{index-CxrJRqpf.js → index-BGATqI6o.js} +3 -3
  119. package/dist/esm/{index-CxrJRqpf.js.map → index-BGATqI6o.js.map} +1 -1
  120. package/dist/esm/{index-CLkgAMaX.js → index-BHRnbCp4.js} +5 -7
  121. package/dist/esm/{index-CLkgAMaX.js.map → index-BHRnbCp4.js.map} +1 -1
  122. package/dist/esm/{index-DhTUEIXO.js → index-BJyjbwYB.js} +4 -5
  123. package/dist/esm/{index-DhTUEIXO.js.map → index-BJyjbwYB.js.map} +1 -1
  124. package/dist/esm/{index-CBZgFhlH.js → index-BM4RT6bs.js} +2 -2
  125. package/dist/esm/{index-CBZgFhlH.js.map → index-BM4RT6bs.js.map} +1 -1
  126. package/dist/esm/index-BOLuOARv.js.map +1 -1
  127. package/dist/esm/{index-BoExjw9h.js → index-BXfKq4TE.js} +3 -3
  128. package/dist/esm/{index-BoExjw9h.js.map → index-BXfKq4TE.js.map} +1 -1
  129. package/dist/esm/{index-DMXFPtO2.js → index-B_WzSRqh.js} +3 -3
  130. package/dist/esm/{index-DMXFPtO2.js.map → index-B_WzSRqh.js.map} +1 -1
  131. package/dist/esm/index-Baelgnzy.js.map +1 -1
  132. package/dist/esm/{index-BNeue0oH.js → index-BesRQOOQ.js} +2 -2
  133. package/dist/esm/{index-BNeue0oH.js.map → index-BesRQOOQ.js.map} +1 -1
  134. package/dist/esm/{index-C9JMPNAn.js → index-Bhhtz3Yu.js} +6 -9
  135. package/dist/esm/{index-C9JMPNAn.js.map → index-Bhhtz3Yu.js.map} +1 -1
  136. package/dist/esm/{index-DbhTHuYg.js → index-BsWs1zP5.js} +2 -2
  137. package/dist/esm/{index-DbhTHuYg.js.map → index-BsWs1zP5.js.map} +1 -1
  138. package/dist/esm/{index-CaDReIhH.js → index-BuTSTk63.js} +7 -12
  139. package/dist/esm/{index-CaDReIhH.js.map → index-BuTSTk63.js.map} +1 -1
  140. package/dist/esm/{index-CDI8N6xZ.js → index-ByFdp6oy.js} +2 -2
  141. package/dist/esm/{index-CDI8N6xZ.js.map → index-ByFdp6oy.js.map} +1 -1
  142. package/dist/esm/{index-nsFKZAN1.js → index-CG4NeJSD.js} +18 -33
  143. package/dist/esm/{index-nsFKZAN1.js.map → index-CG4NeJSD.js.map} +1 -1
  144. package/dist/esm/index-CII7QOSh.js.map +1 -1
  145. package/dist/esm/{index-DMbOktED.js → index-CrIWIc_t.js} +3 -3
  146. package/dist/esm/{index-DMbOktED.js.map → index-CrIWIc_t.js.map} +1 -1
  147. package/dist/esm/{index-eEpssLfk.js → index-D4UQG5qr.js} +3 -3
  148. package/dist/esm/{index-eEpssLfk.js.map → index-D4UQG5qr.js.map} +1 -1
  149. package/dist/esm/{index-WLPh41ZY.js → index-DIjf8saG.js} +3 -3
  150. package/dist/esm/{index-WLPh41ZY.js.map → index-DIjf8saG.js.map} +1 -1
  151. package/dist/esm/{index-D6yp_g0q.js → index-DNLqF2ga.js} +10 -11
  152. package/dist/esm/index-DNLqF2ga.js.map +1 -0
  153. package/dist/esm/{index-BIhphkZ9.js → index-DRMoT6dv.js} +3 -3
  154. package/dist/esm/index-DRMoT6dv.js.map +1 -0
  155. package/dist/esm/index-DVjlAsMm.js.map +1 -1
  156. package/dist/esm/{index-BaQNlWD6.js → index-Dc66zrKf.js} +3 -3
  157. package/dist/esm/{index-BaQNlWD6.js.map → index-Dc66zrKf.js.map} +1 -1
  158. package/dist/esm/{index-C-PIVDFH.js → index-Df_PDwBj.js} +4 -4
  159. package/dist/esm/{index-C-PIVDFH.js.map → index-Df_PDwBj.js.map} +1 -1
  160. package/dist/esm/{index-C41VoUBt.js → index-DjB2Bpvo.js} +2 -2
  161. package/dist/esm/{index-C41VoUBt.js.map → index-DjB2Bpvo.js.map} +1 -1
  162. package/dist/esm/{index-Cm2H1sJO.js → index-DwmNH96j.js} +2 -2
  163. package/dist/esm/{index-Cm2H1sJO.js.map → index-DwmNH96j.js.map} +1 -1
  164. package/dist/esm/{index-BCFkYlgt.js → index-MQ8OZGCg.js} +2 -2
  165. package/dist/esm/{index-BCFkYlgt.js.map → index-MQ8OZGCg.js.map} +1 -1
  166. package/dist/esm/{index-COF3u0iD.js → index-RIqErp5L.js} +4 -5
  167. package/dist/esm/{index-COF3u0iD.js.map → index-RIqErp5L.js.map} +1 -1
  168. package/dist/esm/index-UGKoGZpd.js.map +1 -1
  169. package/dist/esm/{index-pEvELOsK.js → index-X4uZVo2B.js} +2 -2
  170. package/dist/esm/{index-pEvELOsK.js.map → index-X4uZVo2B.js.map} +1 -1
  171. package/dist/esm/index-YO7GGbnc.js.map +1 -1
  172. package/dist/esm/{index-DCHuhGP6.js → index-nAOtrNQ-.js} +4 -5
  173. package/dist/esm/{index-DCHuhGP6.js.map → index-nAOtrNQ-.js.map} +1 -1
  174. package/dist/esm/{index-iJD2Oik7.js → index-vFxwAa_4.js} +2 -2
  175. package/dist/esm/{index-iJD2Oik7.js.map → index-vFxwAa_4.js.map} +1 -1
  176. package/dist/esm/index.js +3 -3
  177. package/dist/esm/{style.css → ms-app.css} +14 -14
  178. package/dist/esm/{normal-DXMV_-7_.js → normal-By6pxQ8V.js} +3 -3
  179. package/dist/esm/{normal-DXMV_-7_.js.map → normal-By6pxQ8V.js.map} +1 -1
  180. package/dist/esm/{normal-D1EvEflK.js → normal-IcqK9eiC.js} +3 -3
  181. package/dist/esm/{normal-D1EvEflK.js.map → normal-IcqK9eiC.js.map} +1 -1
  182. package/dist/esm/{table-WKqWgZ0P.js → table-CDFkhcnd.js} +6 -6
  183. package/dist/esm/{table-WKqWgZ0P.js.map → table-CDFkhcnd.js.map} +1 -1
  184. package/dist/esm/use-condition-CM-TzG8I.js.map +1 -1
  185. package/dist/types/components/basic/ConfigProvider/composables.d.ts +1 -1
  186. package/dist/types/components/basic/DataSelect/DataSelect.d.ts +2 -2
  187. package/dist/types/components/basic/DataSelect/index.d.ts +2 -2
  188. package/dist/types/components/basic/DataSelect/options.d.ts +1 -1
  189. package/dist/types/components/basic/DataTreeSelect/DataTreeSelect.d.ts +3 -0
  190. package/dist/types/components/basic/DataTreeSelect/index.d.ts +3 -0
  191. package/dist/types/components/basic/DataTreeSelect/options.d.ts +1 -0
  192. package/dist/types/components/basic/DynamicFormPanel/DynamicFormPanel.d.ts +2 -2
  193. package/dist/types/components/basic/LexicalEditor/LexicalComposer.vue.d.ts +5 -9
  194. package/dist/types/components/basic/LexicalEditor/plugins/AutoFocusPlugin.vue.d.ts +5 -7
  195. package/dist/types/components/basic/LexicalEditor/plugins/HistoryPlugin.vue.d.ts +4 -6
  196. package/dist/types/components/basic/LexicalEditor/plugins/LexicalMarkdownShortcutPlugin.vue.d.ts +6 -8
  197. package/dist/types/components/basic/LexicalEditor/plugins/LinkPlugin.vue.d.ts +4 -6
  198. package/dist/types/components/basic/LexicalEditor/stage/ContentEditable.vue.d.ts +7 -27
  199. package/dist/types/components/basic/LexicalEditor/stage/index.vue.d.ts +5 -11
  200. package/dist/types/components/basic/SvgIcon/SvgIcon.vue.d.ts +6 -12
  201. package/dist/types/components/basic/VisualPageEditor/editor.vue.d.ts +7 -10
  202. package/dist/types/components/basic/VisualPageEditor/index.d.ts +3 -2
  203. package/dist/types/components/business/ResourceManager/index.d.ts +1 -1
  204. package/dist/types/components/business/ResourceManager/index.vue.d.ts +5 -9
  205. package/dist/types/components/business/Upload/UploadFile.vue.d.ts +7 -11
  206. package/dist/types/components/business/Upload/UploadImage.vue.d.ts +2 -2
  207. package/dist/types/components/business/Upload/UploadVideo.vue.d.ts +2 -2
  208. package/dist/types/components/business/Upload/index.d.ts +9 -9
  209. package/dist/types/components/business/Upload/options.d.ts +3 -3
  210. package/dist/types/components/data-model/data-form/data-form-options.d.ts +1 -1
  211. package/dist/types/components/data-model/data-form/data-form.vue.d.ts +18 -24
  212. package/dist/types/components/data-model/data-form/index.d.ts +6 -6
  213. package/dist/types/components/data-model/data-group-panel/index.vue.d.ts +18 -21
  214. package/dist/types/components/data-model/data-table/components/column-tag/column-tag-options.d.ts +1 -1
  215. package/dist/types/components/data-model/data-table/components/column-tag/column-tag.d.ts +2 -2
  216. package/dist/types/components/data-model/data-table/components/column-tag/index.d.ts +2 -2
  217. package/dist/types/components/data-model/data-table/data-table-options.d.ts +1 -1
  218. package/dist/types/components/data-model/data-table/data-table.vue.d.ts +9 -15
  219. package/dist/types/components/data-model/data-table/index.d.ts +6 -6
  220. package/dist/types/components/data-model/data-table/views/tree/index.d.ts +14 -14
  221. package/dist/types/components/data-model/data-table/views/tree/tree.d.ts +14 -14
  222. package/dist/types/components/data-model/data-tree-list/index.d.ts +2 -2
  223. package/dist/types/components/data-model/data-tree-list/index.vue.d.ts +8 -996
  224. package/dist/types/components/layouts/AsyncComponentView/index.d.ts +1 -1
  225. package/dist/types/components/layouts/AsyncComponentView/index.vue.d.ts +5 -9
  226. package/dist/types/components/layouts/ListItem/index.d.ts +1 -1
  227. package/dist/types/components/layouts/ListItem/index.vue.d.ts +5 -9
  228. package/dist/types/components/layouts/PagePanel/index.d.ts +15 -8
  229. package/dist/types/components/layouts/PagePanel/index.vue.d.ts +19 -16
  230. package/dist/types/components/layouts/SimplePageLayout/index.d.ts +1 -1
  231. package/dist/types/components/layouts/SimplePageLayout/index.vue.d.ts +5 -9
  232. package/dist/types/components/layouts/SlideFadeTransition/index.d.ts +1 -1
  233. package/dist/types/components/layouts/SlideFadeTransition/index.vue.d.ts +5 -9
  234. package/dist/types/layouts/components/Breadcrumb/index.vue.d.ts +5 -9
  235. package/dist/types/layouts/components/Breadcrumb/item.vue.d.ts +12 -20
  236. package/dist/types/layouts/components/Kbd/index.vue.d.ts +5 -9
  237. package/dist/types/layouts/components/Logo/index.vue.d.ts +6 -9
  238. package/dist/types/layouts/components/Menu/index.vue.d.ts +2 -3
  239. package/dist/types/layouts/components/Menu/item.vue.d.ts +2 -3
  240. package/dist/types/layouts/components/Menu/sub.vue.d.ts +2 -3
  241. package/dist/types/layouts/store/modules/tabbar.d.ts +3 -3
  242. package/dist/types/layouts/utils/composables/useViewTransition.d.ts +1 -1
  243. package/package.json +9 -9
  244. package/dist/cjs/ResourceSelectInput-DE4Qst5X.cjs.map +0 -1
  245. package/dist/cjs/index-BNC2Y5bC.cjs.map +0 -1
  246. package/dist/cjs/index-D-CHh2P4.cjs.map +0 -1
  247. package/dist/cjs/index-JyLxed9d.cjs.map +0 -1
  248. package/dist/cjs/index-ejRYnXoW.cjs.map +0 -1
  249. package/dist/esm/index-BIhphkZ9.js.map +0 -1
  250. package/dist/esm/index-CZ0GujBv.js.map +0 -1
  251. package/dist/esm/index-D6yp_g0q.js.map +0 -1
  252. package/dist/esm/index-DqGUsw-a.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BUCV8-xD.cjs","sources":["../../src/assets/iconfonts/ms.js","../../src/assets/iconfonts/doc-editor.js","../../src/constants/data-model.ts","../../src/constants/pattern.ts","../../src/constants/menu.ts","../../src/constants/region.ts","../../src/constants/log.ts","../../src/constants/ms-app-client.ts","../../src/constants/index.ts","../../src/core/component/DataTableComponents.ts","../../src/core/component/DataTableHeaderComponents.ts","../../src/core/component/DataFormComponents.ts","../../src/core/component/DataFilterComponents.ts","../../src/core/component/ConfigComponents.ts","../../src/core/menu/MenuNode.ts","../../src/core/menu/Menu.ts","../../src/core/tabs/Tab.ts","../../src/core/tabs/Tabs.ts","../../src/core/DataModelDefines.ts","../../src/core/UserInfo.ts","../../src/core/Router.ts","../../src/core/PermissionPointManager.ts","../../src/core/UserSession.ts","../../src/composables/create-data-table.ts","../../src/composables/create-data-form.ts","../../src/components/basic/ConfigProvider/constants.ts","../../src/components/basic/ConfigProvider/composables.ts","../../src/components/basic/ConfigProvider/options.ts","../../src/components/basic/ConfigProvider/ConfigProvider.tsx","../../src/components/basic/ConfigProvider/index.ts","../../src/composables/use-column-component.ts","../../src/composables/use-i18n.ts","../../src/composables/on-tab-before-close.ts","../../src/composables/on-tab-refresh.ts","../../src/composables/on-tab-before-switch.ts","../../src/composables/use-current-tab.ts","../../src/composables/use-http-request.ts","../../src/composables/use-ms-app-client.ts","../../src/composables/use-user-info.ts","../../src/composables/use-single-view.ts","../../src/composables/DataForm.ts","../../src/settings.default.ts","../../src/layouts/store/modules/settings.ts","../../src/layouts/utils/index.ts","../../src/layouts/store/modules/menu.ts","../../src/layouts/router/auth-middleware.ts","../../src/core/PageManager.ts","../../src/core/MkModule.ts","../../src/dataviews/ms-material/ms-material-group/MsMaterialGroupForm.ts","../../src/dataviews/ms-material/ms-material-group/MsMaterialGroupTree.ts","../../src/dataviews/ms-material/MsMaterialForm.ts","../../src/dataviews/ms-config/MsConfigForm.ts","../../src/dataviews/ms-config/MsConfigTable.ts","../../src/dataviews/ms-material/MsMaterialComponents.ts","../../src/dataviews/ms-material/MsMaterialTable.ts","../../src/dataviews/ms-role/MsRoleForm.ts","../../src/dataviews/ms-role/MsRoleTable.ts","../../src/dataviews/ms-role/ms-role-permission-point/MsRolePermissionPointTable.ts","../../src/dataviews/ms-role/ms-role-route/MsRoleRouteTable.ts","../../src/dataviews/MsMenu/MsMenuTable.ts","../../src/dataviews/MsMenu/MsRoute/RouteNameInput.vue","../../src/dataviews/MsMenu/MsRoute/MsRouteForm.ts","../../src/dataviews/MsMenu/MsRoute/MsRouteTable.tsx","../../src/dataviews/MsMenu/MsPermissionPoint/MsPermissionPointDefineForm.ts","../../src/dataviews/MsMenu/MsPermissionPoint/MsPermissionPointDefineTable.ts","../../src/components/abstract/abstract-select/abstract-select-options.ts","../../src/components/abstract/abstract-select/abstract-select.ts","../../src/components/abstract/abstract-select/index.ts","../../src/components/basic/SvgIcon/SvgIcon.vue","../../src/components/basic/SvgIcon/index.ts","../../src/components/basic/Button/button-options.ts","../../src/components/basic/Button/button.tsx","../../src/components/basic/Button/index.ts","../../src/components/basic/DataTableSelect/options.ts","../../src/components/basic/DataTableSelect/DataTableSelect.tsx","../../src/components/basic/DataTableSelect/index.ts","../../src/components/basic/DataSelect/options.ts","../../src/components/basic/DataSelect/DataSelect.tsx","../../src/components/basic/DataSelect/index.ts","../../src/components/basic/Pagination/options.tsx","../../src/components/basic/Pagination/Pagination.tsx","../../src/components/basic/Pagination/index.ts","../../src/components/basic/CodeEditor/index.ts","../../src/components/basic/JsonEditor/index.ts","../../src/components/basic/DatePicker/options.ts","../../src/components/basic/DatePicker/DatePicker.tsx","../../src/components/basic/DatePicker/index.ts","../../src/components/basic/IconSelect/options.ts","../../src/components/basic/IconSelect/IconSelect.tsx","../../src/components/basic/IconSelect/index.ts","../../src/components/basic/ImageCropper/options.ts","../../src/components/basic/ImageCropper/ImageCropper.tsx","../../src/components/basic/ImageCropper/api.tsx","../../src/components/basic/VisualPageEditor/core/VisvalPageEditor.ts","../../src/components/basic/DynamicFormPanel/utils.ts","../../src/components/basic/DynamicFormPanel/DynamicFormPanel.tsx","../../src/components/basic/DynamicFormPanel/dialog.ts","../../src/components/basic/VisualPageEditor/core/Dialog.tsx","../../src/components/basic/VisualPageEditor/core/index.ts","../../src/components/basic/VisualPageEditor/toolbar.vue","../../src/components/basic/VisualPageEditor/core/BlockRender.ts","../../src/components/basic/VisualPageEditor/content-editable.vue","../../src/components/basic/VisualPageEditor/editor.vue","../../src/components/basic/VisualPageEditor/modules/BaseImageModule.ts","../../src/components/basic/VisualPageEditor/index.ts","../../src/components/basic/LexicalEditor/assets/iconfont.js","../../src/components/basic/LexicalEditor/composables/utils.ts","../../src/components/basic/LexicalEditor/composables/useCharacterLimit.ts","../../src/components/basic/LexicalEditor/composables/listenerManager.ts","../../src/components/basic/LexicalEditor/composables/useLexicalCommandsLog.ts","../../src/components/basic/LexicalEditor/composables/useLexicalIsTextContentEmpty.ts","../../src/components/basic/LexicalEditor/nodes/HtmlElementNode.ts","../../src/components/basic/LexicalEditor/nodes/HtmlElementDecoratorNode.ts","../../src/components/basic/LexicalEditor/nodes/ModuleDecoratorNode.ts","../../src/components/basic/LexicalEditor/nodes/ModuleDecoratorWarpNode.ts","../../src/components/basic/LexicalEditor/nodes/ImageNode.ts","../../src/components/basic/LexicalEditor/nodes/ImageTextWarpNode.ts","../../src/components/basic/LexicalEditor/nodes/Template.ts","../../src/components/basic/LexicalEditor/nodes/index.ts","../../src/components/basic/LexicalEditor/utils/html.ts","../../src/components/basic/LexicalEditor/utils/url.ts","../../src/components/basic/LexicalEditor/utils/css.ts","../../src/components/basic/LexicalEditor/utils/LinkEditDialog.tsx","../../src/components/business/MaterialList/options.ts","../../src/components/data-model/data-form/data-form-options.ts","../../src/components/data-model/data-form/token.ts","../../src/components/data-model/data-form/views/form/form-options.ts","../../src/components/data-model/data-form/data-form-item/data-form-item-options.ts","../../src/components/data-model/data-form/data-form-item/data-form-item.tsx","../../src/components/data-model/data-form/data-form-item/index.ts","../../src/components/data-model/data-form/views/form/form.tsx","../../src/components/data-model/data-form/views/form/index.ts","../../src/components/data-model/data-form/views/form-view/form-view-options.ts","../../src/components/layouts/PagePanel/index.vue","../../src/components/layouts/PagePanel/index.ts","../../src/components/data-model/data-form/views/form-view/form-view.tsx","../../src/components/data-model/data-form/views/form-view/index.ts","../../src/components/data-model/data-form/data-form.vue","../../src/components/data-model/data-form/composables/use-form-item.ts","../../src/components/data-model/data-form/index.ts","../../src/components/data-model/data-table/data-table-options.ts","../../src/components/data-model/data-table/composables/use-column.ts","../../src/components/data-model/data-table/composables/use-query-params.ts","../../src/components/data-model/data-table/token.ts","../../src/components/data-model/data-table-pagination/data-table-pagination-options.ts","../../src/components/data-model/data-table-pagination/data-table-pagination.tsx","../../src/components/data-model/data-table-pagination/index.ts","../../src/components/data-model/data-table/data-table-column/data-table-column-options.ts","../../src/components/data-model/data-table/data-table-column/data-table-column.tsx","../../src/components/data-model/data-table/data-table-column/index.ts","../../src/components/data-model/data-table/views/table/table-options.ts","../../src/components/data-model/data-table/views/table/table.tsx","../../src/components/data-model/data-table/views/table/index.ts","../../src/components/data-model/data-table/views/table-view/table-view-options.ts","../../src/components/data-model/data-table/views/table-view/header/header-item.tsx","../../src/components/data-model/data-table/views/table-view/header/header.tsx","../../src/components/data-model/data-table/views/table-view/header/index.ts","../../src/components/data-model/data-table/views/table-view/table-view.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item-options.ts","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/classify-search-item.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search-item/index.ts","../../src/components/data-model/data-table/views/table-view/classify-search/classify-search.tsx","../../src/components/data-model/data-table/views/table-view/classify-search/index.ts","../../src/components/data-model/data-table/views/table-view/index.ts","../../src/components/data-model/data-table/data-table.vue","../../src/components/data-model/data-table/views/table-tree/table-tree-options.ts","../../src/components/data-model/data-table/views/table-tree/table-tree.tsx","../../src/components/data-model/data-table/views/table-tree/index.ts","../../src/components/data-model/data-table/views/tree/tree-options.ts","../../src/components/data-model/data-table/views/tree/tree.tsx","../../src/components/data-model/data-table/views/tree/index.ts","../../src/components/data-model/data-table/views/tree-view/tree-view-options.ts","../../src/components/data-model/data-table/views/tree-view/tree-view.tsx","../../src/components/data-model/data-table/views/tree-view/index.ts","../../src/components/data-model/data-table/index.ts","../../src/components/data-model/data-tree-list/index.vue","../../src/components/data-model/data-tree-list/index.ts","../../src/components/data-model/data-group-panel/index.vue","../../src/components/data-model/data-group-panel/index.ts","../../src/components/business/MaterialList/MaterialGroupFormPopover.tsx","../../src/components/business/MaterialList/MaterialGroup.tsx","../../src/components/business/MaterialList/MaterialItem.vue","../../src/components/business/MaterialList/MaterialList.tsx","../../src/components/business/MaterialList/index.ts","../../src/components/layouts/AsyncComponentView/index.ts","../../src/components/basic/LexicalEditor/utils/image.tsx","../../src/components/basic/LexicalEditor/utils/module.tsx","../../src/components/basic/LexicalEditor/utils/template.tsx","../../src/components/basic/LexicalEditor/composables/lexicalEditor.ts","../../src/components/basic/LexicalEditor/composables/useLexicalEditorState.ts","../../src/components/basic/LexicalEditor/composables/useElementBlockSelection.ts","../../src/components/basic/LexicalEditor/composables/useTableOfContents.ts","../../src/components/basic/LexicalEditor/plugins/AutoFocusPlugin.vue","../../src/components/basic/LexicalEditor/plugins/HistoryPlugin.vue","../../src/components/basic/LexicalEditor/plugins/TabIndentationPlugin.vue","../../src/components/basic/LexicalEditor/plugins/NodeTreeViewPlugin.vue","../../src/components/basic/LexicalEditor/plugins/ElementBlockSelectionPlugin.vue","../../src/components/basic/LexicalEditor/plugins/ToolbarPlugin.vue","../../src/components/basic/LexicalEditor/plugins/RichTextEditorPlugin.ts","../../src/components/basic/LexicalEditor/plugins/HashtagPlugin.ts","../../src/components/basic/LexicalEditor/plugins/ListPlugin.ts","../../src/components/basic/LexicalEditor/plugins/CheckListPlugin.ts","../../src/components/basic/LexicalEditor/plugins/TablePlugin.ts","../../src/components/basic/LexicalEditor/DocTheme.ts","../../src/components/basic/LexicalEditor/LexicalComposer.vue","../../src/components/basic/LexicalEditor/stage/composables.ts","../../src/components/basic/LexicalEditor/stage/ContentEditable.vue","../../src/components/basic/LexicalEditor/stage/DecoratedTeleports.ts","../../src/components/basic/LexicalEditor/assets/doc-editor-stage.css?raw","../../src/components/basic/LexicalEditor/assets/doc-editor.css?raw","../../src/components/basic/LexicalEditor/stage/index.vue","../../src/components/basic/MarkdownEditor/options.ts","../../src/components/basic/MarkdownEditor/index.ts","../../src/components/basic/RichTextEditor/index.vue","../../src/components/basic/RichTextEditor/index.ts","../../src/components/basic/Dialog/dialogs.tsx","../../src/components/basic/Dialog/index.ts","../../src/components/basic/Text/options.ts","../../src/components/basic/Text/Text.tsx","../../src/components/basic/Text/index.ts","../../src/components/business/VerifyDialog/option.ts","../../src/components/business/VerifyDialog/VerifyPanel.tsx","../../src/components/business/VerifyDialog/api.tsx","../../src/components/business/VerifyDialog/index.ts","../../src/components/business/ResourceList/ResourceManager.ts","../../src/components/business/ResourceList/components/ResourceItem/index.vue","../../src/components/business/ResourceList/ResourceList.vue","../../src/components/business/ResourceList/index.ts","../../src/components/business/ResourceManager/index.vue","../../src/components/business/ResourceManager/index.ts","../../src/components/business/Upload/options.ts","../../src/components/business/Upload/composables.ts","../../src/components/layouts/SimplePageLayout/TeamImage.vue","../../src/components/layouts/SimplePageLayout/index.vue","../../src/components/layouts/SimplePageLayout/index.ts","../../src/components/layouts/SlideFadeTransition/index.vue","../../src/components/layouts/SlideFadeTransition/index.ts","../../src/components/layouts/ListItem/index.ts","../../src/components/business/FileSelect/api.tsx","../../src/components/business/Upload/UploadFile.vue","../../src/components/business/Upload/UploadImage.vue","../../src/components/business/Upload/UploadVideo.vue","../../src/components/business/Upload/index.ts","../../src/components/business/ResourceSelect/api.tsx","../../src/components/business/ResourceSelect/index.ts","../../src/dataviews/MsMenu/MsMenuTree.tsx","../../src/dataviews/MsMenu/MsMenuForm.ts","../../src/dataviews/ms-role/MsRolePermissionConfigTable.ts","../../src/dataviews/ms-member/MsMemberForm.ts","../../src/dataviews/ms-member/components/MemberNickNameColumn.tsx","../../src/dataviews/ms-member/components/MemberRolesColumn.tsx","../../src/dataviews/ms-member/MsMemberTable.tsx","../../src/dataviews/ms-member-role/MsMemberRoleTable.tsx","../../src/dataviews/ms-member-role/MsMemberRoleForm.ts","../../src/dataviews/ms-ip-white-list/MsIPWhitelistForm.ts","../../src/dataviews/ms-ip-white-list/MsIPWhitelistTable.ts","../../src/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListForm.ts","../../src/dataviews/ms-deny-ip-access-list/MsDenyIPAccessListTable.ts","../../src/dataviews/ms-region/MsRegionForm.ts","../../src/dataviews/ms-region/MsRegionTable.ts","../../src/dataviews/department/DepartmentForm.ts","../../src/dataviews/department/DepartmentTable.ts","../../src/dataviews/department/DepartmentTree.ts","../../src/dataviews/log/operate-log/OperateLogTable.ts","../../src/dataviews/log/login-log/LoginLogTable.ts","../../src/dataviews/log/request-log/RequestLogTable.ts","../../src/dataviews/log/local-log/LocalLogTree.ts","../../src/dataviews/ms-message/MsMessageForm.ts","../../src/dataviews/ms-message/SendForm.ts","../../src/dataviews/ms-message/MsMessageTable.ts","../../src/dataviews/ms-message/MsMessageNotifyTable.tsx","../../src/dataviews/request-log/MsRequestLogTable.tsx","../../src/core/MSAppClient.ts","../../src/core/message/MessagerImpl.ts","../../src/core/message/NotificationerImpl.ts","../../src/core/message/DialogerImpl.tsx","../../src/installer.ts","../../src/layouts/components/Logo/index.vue","../../src/layouts/utils/eventBus.ts","../../src/layouts/components/Kbd/index.vue","../../src/layouts/components/Topbar/Toolbar/NavSearch/index.vue","../../src/layouts/components/Topbar/Toolbar/Fullscreen/index.vue","../../src/layouts/components/Topbar/Toolbar/Message/message-list.vue","../../src/layouts/components/Topbar/Toolbar/Message/message.tsx","../../src/layouts/utils/composables/useMenu.ts","../../src/layouts/components/Topbar/Toolbar/rightSide.vue","../../src/layouts/components/Header/index.vue","../../src/layouts/components/MainSidebar/index.vue","../../src/layouts/components/Menu/types.ts","../../src/layouts/components/Menu/item.vue","../../src/layouts/components/Menu/sub.vue","../../src/layouts/components/Menu/index.vue","../../src/layouts/components/SubSidebar/index.vue","../../src/layouts/utils/composables/useMainPage.ts","../../src/layouts/store/modules/keepAlive.ts","../../src/layouts/store/modules/tabbar.ts","../../src/layouts/utils/composables/useTabbar.ts","../../src/layouts/components/Topbar/Tabbar/index.vue","../../src/layouts/components/Breadcrumb/index.vue","../../src/layouts/components/Breadcrumb/item.vue","../../src/layouts/components/Topbar/Toolbar/Breadcrumb/index.vue","../../src/layouts/components/Topbar/Toolbar/leftSide.vue","../../src/layouts/components/Topbar/Toolbar/index.vue","../../src/layouts/components/Topbar/index.vue","../../src/layouts/components/Search/index.vue","../../src/layouts/components/HotkeysIntro/index.vue","../../src/layouts/components/Views/link.vue","../../src/layouts/components/Copyright/index.vue","../../src/layouts/components/BackTop/index.vue","../../src/layouts/components/SystemProvider/index.tsx","../../src/layouts/index.vue","../../src/layouts/layout.tsx","../../src/layouts/index.ts","../../src/utils.ts","../../src/layouts/store/index.ts","../../src/application.ts","../../src/define-data-table.ts","../../src/define-data-form.ts","../../src/define-data-tree.ts","../../src/index.ts"],"sourcesContent":["window._iconfont_svg_string_2806063='<svg><symbol id=\"icon-ms-class\" viewBox=\"0 0 1024 1024\"><path d=\"M231.82877127 551.80569222c64.06000071-0.00111843 128.12447517 0.37572494 192.17553067-0.30304029 13.67258909-0.14536931 26.95379854 12.46825699 26.89565127 26.87775858-0.51214905 126.01996743-0.33323235 252.04217173-0.21581824 378.06549334 0.00782791 8.77810005-2.02958621 16.34739427-9.32267804 21.56728775-3.12209635 2.2353408-6.84244537 4.16428601-10.55720221 4.90902641-4.98953899 0.99969707-10.23515307 0.95273187-15.37117981 0.95496762-124.87825522 0.0547931-249.75651043 0.04696519-374.63476565 0.08945777-8.91564259 0.00335417-17.38175602-1.16631325-22.47864547-9.54408732-2.28677859-3.75836899-4.15869497-8.04677746-4.99065742-12.33295133-0.85544505-4.41253319-0.23035563-9.11468658-0.23147293-13.69048064-0.01453739-123.35299015 0.19457138-246.70709987-0.33099549-370.05785315-0.06262101-14.77292715 13.41763357-26.98287218 26.88670493-26.83973973 64.05329123 0.68323783 128.11552882 0.30527715 192.17553067 0.30304028zM231.20479915 938.77900024c55.09739293 0 110.19590542-0.00111843 165.29441678 0.00111843 7.21146083 0 8.94583467-1.92335417 8.9435978-9.91533852-0.02236416-105.42889301-0.04361102-210.8600229-0.06485675-316.28891705-0.00111843-3.43072768 0.19345408-6.87599161-0.05926571-10.28882773-0.33211392-4.48186254-2.75755349-6.93190315-7.50108217-6.70937544-3.99655139 0.18786304-7.99869383 0.3701339-11.99860053 0.37125234-102.56958123 0.01900999-205.14028089 0.01789155-307.70986212 0.00559104-3.42960925 0-6.86257266-0.08274944-10.2877093-0.24712874-8.46723186-0.40703545-11.03692345 2.08326087-11.03468657 10.4699813 0.02124686 107.33547406 0.02571947 214.67094926 0.00559104 322.00754176-0.00111843 8.47617821 1.96584675 10.59186802 10.26310827 10.59074958 54.71607694-0.00670947 109.43327232-0.00447261 164.14934926 0.00223687zM230.07315058 454.13954638c-63.87661141 0-127.75657699-0.33546923-191.62871581 0.26390186-13.85374265 0.13083307-25.60745017-10.21949725-25.56160341-25.41287879 0.37796181-126.60927488 0.20351773-253.21854862 0.23147293-379.8289408 0.00335417-13.30916466 5.16845568-21.4990757 15.31974086-24.37851705 2.33598066-0.66199211 4.88218851-0.79729778 7.33334756-0.79841621 130.80487026-0.03466467 261.60974165 0.10846777 392.41237504-0.24153771 12.71650304-0.03466467 22.25388089 11.81632853 22.34222137 21.9150575 0.04361102 4.95711005 0.04361102 9.91533853 0.04361102 14.8724497 0.00670947 121.07963051 0.02236416 242.16037945-0.01565468 363.24000995-0.00223687 7.36913067 0.14313358 14.56717255-4.93250901 21.17031709-3.87130937 5.03538688-8.56340025 7.3422939-14.23617707 8.50637027-2.77544505 0.57029746-5.68507733 0.65975523-8.53432548 0.66087368-64.25792739 0.03690155-128.51697323 0.02907363-192.77378332 0.02907363zM231.88803698 66.307438c0 0.05143893 0 0.10287673 0 0.15543409-52.43712626 0-104.87313294 0.00223687-157.3102592-0.00447259-3.43184611 0-6.8670464-0.18898034-10.29330034-0.08163101-4.23249806 0.1330688-6.74068594 2.39412907-7.17120398 6.65458232-0.22923719 2.27000547-0.26390187 4.56796615-0.26390187 6.85474589-0.00223687 71.50405291 0.01900999 143.00922539 0.01789156 214.51327829-0.00111843 34.51302912-0.05255623 69.0260571-0.0547931 103.53796779 0 8.9201152 2.68039509 11.67431339 10.86695196 11.67431339 109.63902691 0.00447261 219.27917113 0.00670947 328.91819804 0.12076829 5.26015033 0.00559104 7.82313245-2.25546809 8.4717056-7.14660296 0.27396665-2.06872462 0.32428601-4.17994069 0.32540445-6.27102947 0.00782791-104.68303417 0.00335417-209.36495104-0.02012843-314.04798522-0.00111843-3.04717483-0.19904512-6.09434965-0.33770496-9.14040603-0.22700032-4.9973669-2.91186915-6.87487317-7.83319609-6.86816485-55.10522083 0.07939413-110.21156011 0.04920206-165.31566251 0.04920207zM753.85286656 23.96792227c62.16124757 0 124.32249515-0.03019207 186.48262542 0.04920206 5.64146631 0.00670947 11.51440669-0.14313358 16.86848853 1.30273735 7.45858958 2.01504882 12.45483805 7.13318514 13.02848968 15.51543182 0.57141475 8.32633515 1.82159587 16.64260665 1.83165952 24.96335075 0.14425202 119.36426667 0.36901547 238.72853333-0.1319515 358.09056427-0.06821205 16.33956637-3.04046535 23.89656007-16.41560634 29.00574891-2.0799067 0.79394247-4.41924267 1.28596423-6.6378092 1.28708153-130.04223829 0.04137415-260.08335815 0.01677312-390.12559645-0.00223687-15.37117981-0.00223687-23.62371186-8.06802432-23.62483029-23.10485334-0.01118208-128.13565725-0.11070464-256.27131449 0.08610361-384.40473485 0.02571947-16.08572814 7.90476231-22.815232 24.15598933-22.95277455 3.04717483-0.0268379 6.09546809 0.2381824 9.14264292 0.23930084 61.78105003 0.01565469 123.56098162 0.01118208 185.33979477 0.01118208zM752.61386866 66.39354161c0 0.02571947 0 0.04920206 0 0.07492152-51.29429561 0-102.58747278-0.00111843-153.88176839 0.00223688-4.00437931 0-8.00875861 0.10735047-12.01201949 0.02907363-5.56766322-0.10958621-8.64614855 2.31920754-8.72330695 8.09038848-0.02236416 1.71424541-0.24712875 3.42625507-0.24712874 5.13938205-0.01789155 105.82921899-0.03019207 211.65955755-0.01789156 317.4876581 0.00111843 9.68945664 1.79699485 11.52111616 11.54795406 12.22671928 0.94937657 0.06821205 1.90434418 0.11070464 2.85707606 0.11070464 107.73580003 0.01453739 215.47271965 0.03466467 323.20851968 0.01789156 9.50830307-0.00111843 12.26473927-2.87720448 12.26026552-12.35196017-0.00670947-16.59004928-0.0503205-33.17898126-0.04920206-49.76903055 0.00447261-89.24028814 0.02012843-178.47945785 0.0279552-267.72086443 0.00111843-11.34219947-1.84843264-13.34830307-11.93709796-13.3460662-54.34370731 0.01565469-108.68853191 0.00782791-163.03335651 0.00782791zM511.76517177 760.56120739c1.36647566-23.00868608 4.71109973-45.32071424 12.04892103-66.88800314 4.46061682-13.10676537 8.8429568-26.4181669 15.15200626-38.66389617 6.12789703-11.89572267 13.91636366-23.15629227 22.34669397-33.58713514 9.65031822-11.94157056 20.0532059-23.52195357 31.54189312-33.65758294 10.01374379-8.83401159 21.62655459-16.06448242 33.21029177-22.84877938 11.25721429-6.59307975 23.14063645-12.27927552 35.19179435-17.30348032 8.90781469-3.71475797 18.36579726-6.64004494 27.86068252-8.30508942 19.06021831-3.34126877 38.13609131-8.03000434 57.71069554-5.82932935 16.61353301 1.86744263 33.54575986 3.01027328 49.58787812 7.28302706 16.90427165 4.50310941 33.58042567 11.05481501 49.14282268 19.06916352 16.11032917 8.29837995 30.87990215 19.11501141 44.64306745 31.3227207 13.48584562 11.96169899 25.07964643 25.41064192 35.36064625 39.96327823 6.64116338 9.39983531 11.99636366 19.76358457 17.35939186 29.9942639 4.21236963 8.03671381 8.61595648 16.23221589 11.04027762 24.88731078 4.08824605 14.59848306 7.63303253 29.49329693 9.61453511 44.49881658 1.83389639 13.89399837 2.17383822 28.13129387 1.60354077 42.155008-0.58371527 14.34911858-1.6594523 28.79440441-6.75634176 42.6123628-3.60069803 9.76549661-5.93667982 19.99170333-9.36964324 29.82541198-2.1078619 6.03843811-4.73122816 12.01649209-7.98863018 17.50923378-6.65793763 11.2337317-13.76540217 22.20915143-20.9723904 33.1029413-2.37400064 3.58839751-2.03070464 6.16479858 0.8957019 9.00845568 17.35268238 16.87296114 34.69418155 33.75822393 51.95740501 50.72176241 10.52812857 10.34585771 21.49460309 20.33276359 31.15722297 31.44237056 6.68142023 7.6811173 3.88025571 21.26201173-4.06811762 27.85285462-6.93525845 5.75105365-21.70594873 5.39433757-28.25653589-0.88228295-22.97849401-22.01569849-45.86081963-44.13203683-68.85273145-66.13319794-4.10837447-3.93169465-8.40237511-7.71019093-12.90772025-11.17446485-3.99319723-3.07177586-8.06243328-1.57334869-11.50434304 1.28260893-24.24209294 20.11806265-52.01443499 32.85469411-82.26030137 41.25706922-24.66925682 6.85250901-49.69522745 7.0772736-74.78382023 6.30122155-18.1052507-0.55911424-36.03829305-4.32754688-53.08122567-10.24409828-17.28558877-6.00041813-34.37660501-13.15149483-49.32733042-24.128033-13.14366691-9.65031822-26.50091634-19.14632192-38.65271296-29.95736234-8.14630002-7.24836238-14.75503559-16.37758635-21.320159-25.20712419-6.89052899-9.26788381-13.28903737-18.96069575-19.16980452-28.90063531-3.62865437-6.13236963-6.14914275-12.97369657-8.69423218-19.67748096-3.16011634-8.32074411-6.06527602-16.75666546-8.64279438-25.27533626-2.08102514-6.87934691-3.97642297-13.87834368-5.13714517-20.95897144-2.20291186-13.44111616-3.81987157-26.97504541-5.68060473-40.46983624zM920.81120825 760.1474636c0.98515968-102.234112-82.54321323-181.47854905-177.91139726-183.05413348-101.6257957-1.67846229-191.05730105 82.93571129-185.92686536 192.22696847 4.20118755 89.45722482 79.97352163 178.23456597 192.23479638 173.33001216 89.18325817-3.8947931 171.16400185-77.05606144 171.6023478-182.50284715z\" ></path></symbol><symbol id=\"icon-ms-options\" viewBox=\"0 0 1024 1024\"><path d=\"M548.44677917 516.55199403V38.68508615c0-20.10686691-16.47349191-36.40773291-36.58035883-36.4077329s-36.58035883 16.30086599-36.58035997 36.4077329v477.93678108c-62.47432192 16.21455303-109.00947058 73.19771022-109.00947058 141.01111922 0 67.91616398 46.44472605 124.96919438 109.33006336 141.08510322a36.74887509 36.74887509 0 0 0-0.32059278 4.55815964v182.03866454c0 20.10686691 16.47349191 36.40773291 36.58035997 36.4077329s36.58035883-16.30086599 36.58035883-36.4077329V803.27624931a36.72832455 36.72832455 0 0 0-0.36169274-4.48417678c63.02097181-16.02959587 109.67942599-73.16071879 109.67942486-141.15086563 0.0123301-67.91616398-46.43239595-124.96508359-109.31773212-141.08921287z m15.0431596 192.56887637a72.81957547 72.81957547 0 1 1 21.32758187-51.4919936 72.338688 72.338688 0 0 1-21.32758187 51.49610325zM183.95432505 152.46644451a36.73654499 36.73654499 0 0 0 0.33292174-4.55404885V38.68508615a36.37485113 36.37485113 0 1 0-72.7497034 0V147.91239566a36.8310784 36.8310784 0 0 0 0.2055077 4.61981127c-62.88533731 16.11179918-109.42459677 73.16071879-109.42459562 141.08510322s46.54747989 124.9486427 109.43281607 141.08099243a36.8187483 36.8187483 0 0 0-0.20961735 4.48006599V985.31491385a36.37485113 36.37485113 0 1 0 72.74970339 0V439.18247936a36.73654499 36.73654499 0 0 0-0.31648199-4.41841437c63.01686215-16.02959587 109.62599367-73.16071879 109.62599367-141.14675484S246.97940651 168.48781995 183.95432505 152.46644451z m15.44595342 192.64285924A72.81957547 72.81957547 0 1 1 220.72786147 293.61731015a72.338688 72.338688 0 0 1-21.327583 51.4919936zM1021.72264675 293.61731015c0-68.01069739-46.70366606-125.12949021-109.74107875-141.15086564a36.8187483 36.8187483 0 0 0 0.19728725-4.55404885V38.68508615a36.37485113 36.37485113 0 1 0-72.74970339 0V147.91239566a36.74065579 36.74065579 0 0 0 0.34114332 4.61981127c-62.88533731 16.11179918-109.35883321 73.16071879-109.35883435 141.08510322s46.44472605 124.96919438 109.33006336 141.08510208a36.74887509 36.74887509 0 0 0-0.32059278 4.5499392V985.31491385a36.37485113 36.37485113 0 1 0 72.7497034 0V439.25235143a36.84340963 36.84340963 0 0 0-0.18906681-4.48417678c63.04152235-16.02548509 109.74107762-73.1442779 109.74107875-141.1508645z m-94.14715846 51.48788281a72.81546581 72.81546581 0 1 1 21.33169265-51.48788281 72.338688 72.338688 0 0 1-21.33169265 51.48788281z\" ></path></symbol><symbol id=\"icon-ms-template\" viewBox=\"0 0 1024 1024\"><path d=\"M1002.9056 812.71466667v-732.91093334a60.75733333 60.75733333 0 0 0-60.8256-60.8256H210.60266667a60.8256 60.8256 0 0 0-60.8256 60.8256v69.49546667c0 0.88746667-0.68266667 1.57013333-1.57013334 1.57013333h-67.3792a60.8256 60.8256 0 0 0-60.8256 60.8256v731.47733334a60.75733333 60.75733333 0 0 0 60.8256 60.8256h731.47733334a60.75733333 60.75733333 0 0 0 60.8256-60.8256v-69.49546667c0-0.88746667 0.68266667-1.57013333 1.57013333-1.57013333h69.08586667a59.46026667 59.46026667 0 0 0 59.11893333-59.392z m-805.41013333-742.33173334c0-2.11626667 1.70666667-3.6864 3.6864-3.6864h748.7488c2.8672 0 5.25653333 2.38933333 5.25653333 5.25653334v747.17866666a5.3248 5.3248 0 0 1-5.25653333 5.25653334h-75.3664a1.57013333 1.57013333 0 0 1-1.57013334-1.57013334l2.2528-610.37226666a60.75733333 60.75733333 0 0 0-60.8256-60.8256l-615.35573333-0.75093334a1.57013333 1.57013333 0 0 1-1.57013333-1.57013333v-78.91626667z m624.09386666 885.76h-748.68053333a5.25653333 5.25653333 0 0 1-5.25653333-5.25653333v-747.17866667c0-2.8672 2.32106667-5.25653333 5.25653333-5.25653333l749.43146667 0.75093333c2.8672 0 5.25653333 2.38933333 5.25653333 5.25653334l-2.2528 747.86133333a3.75466667 3.75466667 0 0 1-3.75466667 3.82293333z m0 0\" ></path><path d=\"M452.47146667 347.61386667a59.1872 59.1872 0 0 0-57.1392-59.11893334h-165.75146667a59.1872 59.1872 0 0 0-57.20746667 59.11893334v148.61653333c0 32.69973333 26.55573333 59.25546667 59.25546667 59.25546667h161.72373333a59.25546667 59.25546667 0 0 0 59.25546667-59.25546667v-148.61653333h-0.13653333z m-47.58186667 156.4672a3.6864 3.6864 0 0 1-3.6864 3.6864h-177.5616a3.6864 3.6864 0 0 1-3.6864-3.6864v-164.31786667c0-2.11626667 1.70666667-3.6864 3.6864-3.6864h177.42506667c2.11626667 0 3.6864 1.70666667 3.6864 3.6864v164.31786667h0.13653333z m309.93066667-156.4672a59.1872 59.1872 0 0 0-57.20746667-59.11893334h-97.62133333a59.1872 59.1872 0 0 0-57.1392 59.11893334v475.68213333c0 32.69973333 26.55573333 59.25546667 59.25546666 59.25546667h93.45706667a59.25546667 59.25546667 0 0 0 59.25546667-59.25546667v-475.68213333z m-47.58186667 483.60106666a3.6864 3.6864 0 0 1-3.6864 3.6864h-109.29493333a3.6864 3.6864 0 0 1-3.6864-3.6864v-491.38346666c0-2.11626667 1.70666667-3.6864 3.6864-3.6864h109.1584c2.11626667 0 3.6864 1.70666667 3.6864 3.6864v491.38346666h0.13653333z m-211.69493333-156.8768a59.1872 59.1872 0 0 0-57.20746667-59.11893333h-165.888a59.1872 59.1872 0 0 0-57.20746667 59.11893333v148.61653334c0 32.69973333 26.55573333 59.25546667 59.25546667 59.25546666h161.72373333a59.25546667 59.25546667 0 0 0 59.25546667-59.25546666v-148.61653334z m-47.78666667 156.4672a3.6864 3.6864 0 0 1-3.6864 3.6864h-177.42506667a3.6864 3.6864 0 0 1-3.6864-3.6864v-164.31786666c0-2.11626667 1.70666667-3.6864 3.6864-3.6864h177.42506667c2.11626667 0 3.6864 1.70666667 3.6864 3.6864v164.31786666z m0 0\" ></path></symbol><symbol id=\"icon-ms-monitor\" viewBox=\"0 0 1024 1024\"><path d=\"M898.63543088 843.40179753c60.75699579 0 110.46726541-49.71026963 110.46726542-110.46726541V125.36456912c0-60.75699579-49.71026963-110.46726541-110.46726542-110.46726542H125.36456912c-60.75699579 0-110.46726541 49.71026963-110.46726542 110.46726542v607.569963c0 60.75699579 49.71026963 110.46726541 110.46726542 110.46726541h220.93453212v110.46726541H42.51411973c-16.57008987 0-27.61681602 11.04672615-27.61681603 27.61681733s11.04672615 27.61681602 27.61681603 27.61681603h938.97176054c16.57008987 0 27.61681602-11.04672615 27.61681603-27.61681603s-11.04672615-27.61681602-27.61681603-27.61681733H677.70089876v-110.46726541h220.93453212zM125.36456912 788.16816418c-33.14017975 0-55.23363335-22.0934536-55.23363206-55.23363206V125.36456912c0-33.14017975 22.0934536-55.23363335 55.23363206-55.23363206h773.27086176c33.14017975 0 55.23363335 22.0934536 55.23363206 55.23363206v607.569963c0 33.14017975-22.0934536 55.23363335-55.23363206 55.23363206H125.36456912z m718.03722841-331.40179753c0 16.57008987-11.04672615 27.61681602-27.61681603 27.61681733h-154.65417261L622.46726541 340.77573751l-104.94390169 370.06534101-115.99062913-303.78498151-38.66354348 77.32708697H208.2150185c-16.57008987 0-27.61681602-11.04672615-27.61681603-27.61681733s11.04672615-27.61681602 27.61681603-27.61681604h121.51399286l77.32708565-154.65417259 104.94390299 265.121438L622.46726541 125.36456912l77.32708695 303.78498149h115.99062914c16.57008987 0 27.61681602 11.04672615 27.61681603 27.61681604z\" ></path></symbol><symbol id=\"icon-ms-image-text\" viewBox=\"0 0 1024 1024\"><path d=\"M928 1024h-832a32 32 0 0 1-32-32V32a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v960a32 32 0 0 1-32 32zM128 960h768V64H128z\" ></path><path d=\"M736 256h-128a32 32 0 0 1 0-64h128a32 32 0 0 1 0 64zM736 448h-128a32 32 0 0 1 0-64h128a32 32 0 0 1 0 64zM736 640h-448a32 32 0 0 1 0-64h448a32 32 0 0 1 0 64zM736 832h-448a32 32 0 0 1 0-64h448a32 32 0 0 1 0 64zM480 448h-192a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32zM320 384h128V256H320z\" ></path></symbol><symbol id=\"icon-ms-tags\" viewBox=\"0 0 1024 1024\"><path d=\"M867.12685 559.619989l-415.999992-415.999992A52.986666 52.986666 0 0 0 413.413525 127.999998H338.84686c-3.166667-26.559999-9.286666-51.046666-18-71.333332C299.733527 7.333333 271.153528 0 256.000195 0c-13.94 0-40.439999 6.34-61.259999 48.806666-10.473333 21.366666-17.946666 48.966666-21.573333 79.193332H53.333532a53.393332 53.393332 0 0 0-53.333332 53.333332v360.079993a52.986666 52.986666 0 0 0 15.62 37.713332l415.999992 415.999992a53.333332 53.333332 0 0 0 75.426665 0l360.079993-360.079993a53.399999 53.399999 0 0 0 0-75.426665z m-634.073321-491.99999C241.493529 50.373332 250.666862 42.666666 256.000195 42.666666c6 0 16.573333 9.64 25.646666 30.806666 6.493333 15.16 11.333333 33.999999 14.146667 54.526666H216.166862c3.206667-23.42 9.013333-44.359999 16.886667-60.413333z m603.899988 537.286656l-360.079993 360.046659a10.666666 10.666666 0 0 1-15.08 0l-415.999992-415.999991A10.573333 10.573333 0 0 1 42.666866 541.413323V181.33333a10.666666 10.666666 0 0 1 10.666666-10.666667h245.333329c0 47.853332-10.373333 92.159998-27.066666 115.633331-5.926667 8.326667-16.566666 14.186666-22.306667 16.113333C204.040196 314.753327 170.666863 356.219993 170.666863 405.333325c0 58.813332 47.853332 106.666665 106.666665 106.666665s106.666665-47.853332 106.666665-106.666665c0-47.086666-30.666666-87.139998-73.079999-101.246664C330.060194 272.706661 341.333527 223.693329 341.333527 170.666663h72.079998a10.573333 10.573333 0 0 1 7.54 3.126667l415.999992 415.999992a10.666666 10.666666 0 0 1 0 15.08zM277.333528 341.333327a63.999999 63.999999 0 1 1-63.999999 63.999998 64.073332 64.073332 0 0 1 63.999999-63.999998z m319.999994 682.666653a21.333333 21.333333 0 0 1-15.086667-36.419999l382.706659-382.706659a10.666666 10.666666 0 0 0 0-15.08L539.580189 164.419997a21.333333 21.333333 0 0 1 30.173333-30.173333l425.373325 425.373325a53.399999 53.399999 0 0 1 0 75.426665l-382.706659 382.706659A21.266666 21.266666 0 0 1 597.333522 1023.99998z\" ></path></symbol><symbol id=\"icon-ms-newspaper\" viewBox=\"0 0 1024 1024\"><path d=\"M910.22222187 1012.62222187H159.28888853a56.95288853 56.95288853 0 0 1-56.88888853-56.88888854V68.26666667a56.95288853 56.95288853 0 0 1 56.88888853-56.88888854h750.93333334a56.95288853 56.95288853 0 0 1 56.8888896 56.88888854v887.46666666a56.95288853 56.95288853 0 0 1-56.8888896 56.88888854zM159.28888853 56.88888853a11.37777813 11.37777813 0 0 0-11.37777706 11.37777814v887.46666666a11.37777813 11.37777813 0 0 0 11.37777706 11.37777814h750.93333334a11.37777813 11.37777813 0 0 0 11.37777813-11.37777814V68.26666667a11.37777813 11.37777813 0 0 0-11.37777813-11.37777814z m603.02222294 773.6888896H307.2a22.7555552 22.7555552 0 0 1 0-45.51111146h455.11111147a22.7555552 22.7555552 0 0 1 0 45.51111146z m0-182.0444448H307.2a22.7555552 22.7555552 0 0 1 0-45.51111146h455.11111147a22.7555552 22.7555552 0 0 1 0 45.51111146z m0-227.5555552H625.77777813a22.7555552 22.7555552 0 0 1 0-45.51111146h136.53333334a22.7555552 22.7555552 0 0 1 0 45.51111146z m0-182.0444448H625.77777813a22.7555552 22.7555552 0 0 1 0-45.51111146h136.53333334a22.7555552 22.7555552 0 0 1 0 45.51111146zM496.77511147 465.20888853A22.7555552 22.7555552 0 0 0 512 443.73333333V216.17777813a22.7555552 22.7555552 0 0 0-45.51111147 0v162.688L324.97777813 201.9555552a22.7555552 22.7555552 0 0 0-40.53333333 14.22222293v227.5555552a22.7555552 22.7555552 0 0 0 45.5111104 0V281.04533333L471.46666667 457.9555552a22.7555552 22.7555552 0 0 0 25.30133333 7.2604448z\" ></path></symbol><symbol id=\"icon-ms-ad-card\" viewBox=\"0 0 1024 1024\"><path d=\"M931.49866667 295.25333333h-23.09688889l-60.416-225.62133333c-12.51555555-46.76266667-60.75733333-74.63822222-107.52-62.12266667L67.81155555 187.73333333C21.04888889 200.24888889-6.82666667 248.49066667 5.68888889 295.25333333L147.34222222 823.75111111v108.88533334c0 48.46933333 39.36711111 87.83644445 87.83644445 87.83644444h696.43377778c48.46933333 0 87.83644445-39.36711111 87.83644444-87.83644444V382.976c-0.11377778-48.35555555-39.48088889-87.72266667-87.95022222-87.72266667z m-784.27022222 87.72266667v159.40266667L76.00355555 276.48c-2.16177778-7.96444445 2.61688889-16.27022222 10.58133334-18.432l672.768-180.224c7.96444445-2.16177778 16.27022222 2.61688889 18.432 10.58133333l55.40977778 206.73422222H235.06488889c-48.35555555 0.11377778-87.83644445 39.48088889-87.83644444 87.83644445z m799.28888888 549.77422222c0 8.30577778-6.71288889 15.01866667-15.01866666 15.01866667H235.06488889c-8.30577778 0-15.01866667-6.71288889-15.01866667-15.01866667V382.976c0-8.30577778 6.71288889-15.01866667 15.01866667-15.01866667h696.43377778c8.30577778 0 15.01866667 6.71288889 15.01866666 15.01866667v549.77422222z\" ></path><path d=\"M802.01955555 511.43111111c-16.15644445-11.94666667-38.912-8.53333333-50.97244444 7.62311111L579.47022222 750.592c-11.94666667 16.15644445-8.53333333 38.912 7.62311111 50.97244445 16.15644445 11.94666667 38.912 8.53333333 50.97244445-7.62311112l171.69066667-231.65155555c11.83288889-16.15644445 8.41955555-38.912-7.7368889-50.85866667zM595.62666667 511.43111111c-16.15644445-11.94666667-38.912-8.53333333-50.97244445 7.62311111L372.96355555 750.592c-11.94666667 16.15644445-8.53333333 38.912 7.62311112 50.97244445 16.15644445 11.94666667 38.912 8.53333333 50.97244444-7.62311112l171.69066667-231.65155555c11.83288889-16.15644445 8.41955555-38.912-7.62311111-50.85866667z\" ></path></symbol><symbol id=\"icon-ms-ad\" viewBox=\"0 0 1024 1024\"><path d=\"M992 960H32c-17.92 0-32 14.08-32 32s14.08 32 32 32h960c17.92 0 32-14.08 32-32s-14.08-32-32-32zM907.52 0H116.48C52.48 0 0 52.48 0 116.48v599.04C0 779.52 52.48 832 116.48 832h791.04c64 0 116.48-52.48 116.48-116.48V116.48c0-64-52.48-116.48-116.48-116.48zM960 715.52c0 28.8-23.68 52.48-52.48 52.48H116.48c-28.8 0-52.48-23.68-52.48-52.48V116.48c0-28.8 23.68-52.48 52.48-52.48h791.04c28.8 0 52.48 23.68 52.48 52.48v599.04z\" ></path><path d=\"M360.32 224H288c-15.36 0-28.16 10.88-31.36 25.6l-64 320c-3.84 17.28 7.68 34.56 24.96 37.76a32 32 0 0 0 37.76-24.96l7.68-38.4h122.24l7.68 38.4c3.2 15.36 16.64 25.6 31.36 25.6 1.92 0 4.48 0 6.4-0.64a32.64 32.64 0 0 0 24.96-37.76l-64-320a32.704 32.704 0 0 0-31.36-25.6z m-84.48 256l38.4-192h19.2l38.4 192h-96zM640 224H551.68c-17.92 0-32 14.08-32 32v320c0 17.92 14.08 32 32 32H640c105.6 0 192-86.4 192-192s-86.4-192-192-192z m0 320h-55.68v-256H640c70.4 0 128 57.6 128 128s-57.6 128-128 128z\" ></path></symbol><symbol id=\"icon-ms-app\" viewBox=\"0 0 1024 1024\"><path d=\"M933.57056 251.43523555l-403.89632-233.08629333c-10.21724445-5.93806222-22.92167111-5.93806222-33.14005333 0l-403.89632 233.08629333c-10.21724445 5.93806222-16.56945778 16.84593778-16.56945778 28.72206223v466.30912c0 11.87498667 6.35221333 22.784 16.56945778 28.72206222l403.89632 233.22396445c5.10976 2.89905778 10.90901333 4.41912889 16.56945778 4.41912888s11.46083555-1.51779555 16.56945777-4.41912888l403.89632-233.22396445c10.21724445-5.93806222 16.56945778-16.84593778 16.56945778-28.72206222v-466.30912c0-11.87498667-6.35221333-22.784-16.56945778-28.72206223zM883.85991111 727.41091555l-370.75512889 214.02965334-370.75512889-214.02965334v-428.06044444l370.75512889-214.02965333 370.75512889 214.02965333v428.06044444z\" ></path><path d=\"M236.79886222 365.76824889c-9.1136 15.87996445-3.72849778 36.17792 12.15260445 45.29152l230.60024888 133.11317333v263.32615111c0 18.36600889 14.77518222 33.14005333 33.14005334 33.14005334s33.14005333-14.77518222 33.14005333-33.14005334v-262.912l231.42855111-133.66499555c15.87996445-9.1136 21.26506667-29.41269333 12.15260445-45.29152s-29.41269333-21.26506667-45.29152-12.15260445l-231.0144 133.38851556-231.0144-133.38851556c-15.87996445-9.1136-36.04024889-3.58968889-45.29152 12.28913778z\" ></path></symbol><symbol id=\"icon-ms-todo\" viewBox=\"0 0 1024 1024\"><path d=\"M758.4 428.8c0-14.4-14.4-27.2-27.2-27.2H238.4c-14.4 0-27.2 14.4-27.2 27.2s14.4 27.2 27.2 27.2h491.2c14.4 1.6 28.8-12.8 28.8-27.2zM400 566.4h-155.2c-16 0-30.4 11.2-30.4 27.2 0 14.4 14.4 27.2 30.4 27.2H400c16 0 30.4-14.4 30.4-27.2 0-16-14.4-27.2-30.4-27.2z m0 166.4h-155.2c-16 0-30.4 11.2-30.4 27.2 0 14.4 14.4 27.2 30.4 27.2H400c16 0 30.4-14.4 30.4-27.2 0-16-14.4-27.2-30.4-27.2z m329.6-496H238.4c-14.4 0-27.2 14.4-27.2 27.2 0 14.4 14.4 27.2 27.2 27.2h491.2c14.4 0 27.2-14.4 27.2-27.2 1.6-14.4-12.8-27.2-27.2-27.2zM484.8 953.6H102.4V70.4h764.8v412.8c0 16 11.2 27.2 27.2 27.2s27.2-11.2 27.2-27.2V43.2c0-14.4-14.4-27.2-27.2-27.2H75.2C62.4 16 48 30.4 48 43.2v937.6c0 12.8 14.4 27.2 27.2 27.2h409.6c16 0 27.2-11.2 27.2-27.2s-11.2-27.2-27.2-27.2z m273.6-387.2c-120 0-217.6 99.2-217.6 220.8S636.8 1008 758.4 1008 976 908.8 976 787.2s-97.6-220.8-217.6-220.8z m0 387.2c-89.6 0-163.2-73.6-163.2-164.8S668.8 624 758.4 624s163.2 73.6 163.2 164.8S848 953.6 758.4 953.6z m81.6-193.6h-54.4v-54.4c0-14.4-14.4-27.2-27.2-27.2-14.4 0-27.2 14.4-27.2 27.2v83.2c0 14.4 14.4 27.2 27.2 27.2h81.6c14.4 0 27.2-14.4 27.2-27.2 0-14.4-14.4-28.8-27.2-28.8z\" ></path></symbol><symbol id=\"icon-ms-folder\" viewBox=\"0 0 1024 1024\"><path d=\"M948.67911111 603.136a36.63644445 36.52266667 0 1 0 73.27288889 0 36.63644445 36.52266667 0 1 0-73.27288889 0Z\" ></path><path d=\"M985.31555555 712.13511111c-20.25244445 0-36.63644445 16.384-36.63644444 36.52266667v91.81866667c0 40.16355555-32.65422222 72.81777778-72.81777778 72.81777777H148.48c-40.16355555 0-72.81777778-32.65422222-72.81777778-72.81777777V185.45777778c0-40.16355555 32.65422222-72.81777778 72.81777778-72.81777778H401.63555555l94.09422223 163.04355555c7.50933333 12.97066667 21.84533333 19.56977778 35.84 17.9768889h344.17777777c40.16355555 0 72.81777778 32.65422222 72.81777778 72.81777777v91.02222223c0 20.13866667 16.384 36.52266667 36.63644445 36.52266666s36.63644445-16.384 36.63644444-36.52266666c0-0.91022222 0-1.82044445-0.11377777-2.73066667v-88.17777778C1021.72444445 303.78666667 982.016 250.31111111 926.26488889 229.83111111v-1.13777778c0-77.59644445-63.488-141.08444445-141.08444444-141.08444444H471.26755555l-16.8391111-29.24088889c-8.41955555-14.67733333-20.48-18.432-31.06133334-18.20444445l-0.11377778-0.11377777H148.02488889c-80.44088889 0-145.63555555 65.19466667-145.63555556 145.63555555v653.19822222c0 80.44088889 65.19466667 145.63555555 145.63555556 145.63555556h728.17777778c80.44088889 0 145.63555555-65.19466667 145.63555555-145.63555556v-87.4951111c0.11377778-0.91022222 0.11377778-1.82044445 0.11377778-2.73066667 0-20.13866667-16.384-36.52266667-36.63644445-36.52266667zM779.49155555 160.19911111c35.95377778 0 65.99111111 26.39644445 71.79377778 60.75733334H548.29511111l-35.04355556-60.75733334h266.24z\" ></path></symbol><symbol id=\"icon-ms-file\" viewBox=\"0 0 1024 1024\"><path d=\"M938.32533333 211.17155555L741.14844445 12.97066667c-6.82666667-6.82666667-16.15644445-10.69511111-25.82755556-10.69511112H147.91111111c-40.16355555 0-72.81777778 32.65422222-72.81777778 72.81777778v873.81333334c0 40.16355555 32.65422222 72.81777778 72.81777778 72.81777778h728.17777778c40.16355555 0 72.81777778-32.65422222 72.81777778-72.81777778V236.88533333c0-9.67111111-3.75466667-18.88711111-10.58133334-25.71377778zM876.08888889 912.49777778c0 20.13866667-16.27022222 36.40888889-36.40888889 36.40888889H184.32c-20.13866667 0-36.40888889-16.27022222-36.40888889-36.40888889V111.50222222c0-20.13866667 16.27022222-36.40888889 36.40888889-36.40888889h436.90666667v182.04444445c0 40.16355555 32.65422222 72.81777778 72.81777778 72.81777777h182.04444444v582.54222223zM730.45333333 257.13777778c-20.13866667 0-36.40888889-16.27022222-36.40888888-36.40888889V75.09333333l182.04444444 182.04444445H730.45333333z\" ></path><path d=\"M692.90666667 694.04444445H256c-20.13866667 0-36.40888889 16.27022222-36.40888889 36.40888888s16.27022222 36.40888889 36.40888889 36.40888889h436.90666667c20.13866667 0 36.40888889-16.27022222 36.40888888-36.40888889s-16.27022222-36.40888889-36.40888888-36.40888888zM256 475.59111111c-20.13866667 0-36.40888889 16.27022222-36.40888889 36.40888889s16.27022222 36.40888889 36.40888889 36.40888889h436.90666667c20.13866667 0 36.40888889-16.27022222 36.40888888-36.40888889s-16.27022222-36.40888889-36.40888888-36.40888889H256zM256 329.95555555h218.45333333c20.13866667 0 36.40888889-16.27022222 36.40888889-36.40888888s-16.27022222-36.40888889-36.40888889-36.40888889H256c-20.13866667 0-36.40888889 16.27022222-36.40888889 36.40888889s16.27022222 36.40888889 36.40888889 36.40888888z\" ></path></symbol><symbol id=\"icon-ms-message\" viewBox=\"0 0 1027 1024\"><path d=\"M92.909577 1023.979676a29.034243 29.034243 0 0 1-26.595366-40.531803L134.835024 824.572496a28.918106 28.918106 0 0 1 53.190733 23.227395l-38.905886 89.890015 219.847287-99.180973a29.847202 29.847202 0 0 1 11.613697-2.555014c178.037977 0 322.86078-116.136971 322.86078-258.869309s-144.474392-258.985446-322.512369-258.985446S58.068486 434.236136 58.068486 576.968473a224.608903 224.608903 0 0 0 63.526923 153.997624 29.034243 29.034243 0 1 1-42.622269 39.486571A281.748292 281.748292 0 0 1 0 576.968473c0-174.205457 170.837485-316.937795 380.929266-316.937794s380.929266 142.26779 380.929266 316.937794S594.389019 891.118981 387.200662 894.254679L104.523274 1022.005348a28.801969 28.801969 0 0 1-11.613697 1.974328z\" ></path><path d=\"M452.005092 532.488013H229.835066a29.034243 29.034243 0 0 1 0-58.068485h222.170026a29.034243 29.034243 0 0 1 0 58.068485zM547.934231 665.69712H229.835066a29.034243 29.034243 0 0 1 0-58.068486h318.099165a29.034243 29.034243 0 0 1 0 58.068486zM943.380618 664.651887a27.756736 27.756736 0 0 1-10.916875-2.206603l-147.842365-60.507362a29.034243 29.034243 0 1 1 21.949888-53.65528l81.29588 33.447447L857.78767 511.002674a29.034243 29.034243 0 1 1 53.190733-23.227395l59.113718 136.460942a29.034243 29.034243 0 0 1-26.711503 40.531803z\" ></path><path d=\"M885.892817 525.868206A29.15038 29.15038 0 0 1 865.336573 476.161582c77.927908-77.811771 103.826452-117.646752 103.826453-199.871727C969.163026 156.088089 846.522384 58.068486 695.776595 58.068486c-154.229898 0-270.366869 98.135741-270.366869 161.778801a29.034243 29.034243 0 1 1-58.068486 0C367.34124 118.1113 511.002674 0 695.776595 0c182.799593 0 331.454916 124.034285 331.454916 276.405992 0 102.78122-37.279968 157.365596-120.78245 240.868078a29.034243 29.034243 0 0 1-20.556244 8.594136z\" ></path></symbol><symbol id=\"icon-ms-todo-complete\" viewBox=\"0 0 1024 1024\"><path d=\"M730.050077 899.837231a26.478212 26.478212 0 0 1-18.988359-8.017307l-58.125477-59.813331a26.372721 26.372721 0 1 1 37.765737-36.710827l58.230967 59.70784a26.478212 26.478212 0 0 1-18.882868 44.833625z\" ></path><path d=\"M730.050077 899.837231a26.689193 26.689193 0 0 1-20.359741-9.49418 26.26723 26.26723 0 0 1 3.164727-37.13279l126.589059-105.490883a26.372721 26.372721 0 0 1 33.757083 40.508499l-126.58906 105.490883a26.372721 26.372721 0 0 1-16.562068 6.118471z\" ></path><path d=\"M758.005161 1024a217.838673 217.838673 0 1 1 217.733182-217.733182 218.049655 218.049655 0 0 1-217.733182 217.733182z m0-382.826414a165.093232 165.093232 0 1 0 164.987741 165.093232 165.304213 165.304213 0 0 0-164.987741-165.093232z\" ></path><path d=\"M518.224384 1023.261564H154.597311A106.862264 106.862264 0 0 1 48.262501 915.977336V107.284228A106.862264 106.862264 0 0 1 154.597311 0H828.895034a106.862264 106.862264 0 0 1 106.123828 107.284228v478.928608a26.372721 26.372721 0 0 1-52.745441 0v-478.928608A54.116823 54.116823 0 0 0 828.895034 52.745441H154.597311A54.116823 54.116823 0 0 0 101.007942 107.284228v808.693108A54.116823 54.116823 0 0 0 154.597311 970.516122h363.627073a26.372721 26.372721 0 1 1 0 52.745442z\" ></path><path d=\"M763.490687 279.55084H201.224281a26.372721 26.372721 0 0 1 0-52.745442h562.266406a26.372721 26.372721 0 0 1 0 52.745442zM757.055743 527.454414H201.224281a26.372721 26.372721 0 0 1 0-52.745441h555.831462a26.372721 26.372721 0 0 1 0 52.745441zM419.484918 775.357989H201.224281a26.372721 26.372721 0 0 1 0-52.745441h218.260637a26.372721 26.372721 0 0 1 0 52.745441z\" ></path></symbol><symbol id=\"icon-ms-qa\" viewBox=\"0 0 1024 1024\"><path d=\"M917.544554 1024h-811.089108A25.346535 25.346535 0 0 1 81.108911 998.653465v-892.198019A25.346535 25.346535 0 0 1 106.455446 81.108911h114.870495a25.346535 25.346535 0 0 1 0 50.693069H131.80198v841.504951h760.39604V131.80198h-92.362772a25.346535 25.346535 0 0 1 0-50.693069H917.544554a25.346535 25.346535 0 0 1 25.346535 25.346535v892.198019a25.346535 25.346535 0 0 1-25.346535 25.346535z\" ></path><path d=\"M795.881188 212.910891h-567.762376a25.346535 25.346535 0 0 1-25.346535-25.346535v-162.217821A25.346535 25.346535 0 0 1 228.118812 0h567.762376A25.346535 25.346535 0 0 1 821.227723 25.346535v162.217821a25.346535 25.346535 0 0 1-25.346535 25.346535zM253.465347 162.217822h517.069306V50.693069H253.465347zM790.811881 557.623762H554.582178a25.346535 25.346535 0 0 1 0-50.693069H790.811881a25.346535 25.346535 0 0 1 0 50.693069zM790.811881 639.442376H554.582178a25.346535 25.346535 0 0 1 0-50.693069H790.811881a25.346535 25.346535 0 0 1 0 50.693069zM748.635248 474.588515h-152.079208a25.245149 25.245149 0 0 1-25.346535-25.346535v-152.079208a25.346535 25.346535 0 0 1 25.346535-25.346534h152.079208a25.346535 25.346535 0 0 1 25.346534 25.346534v152.079208a25.245149 25.245149 0 0 1-25.346534 25.346535z m-126.327129-50.693069h101.386138v-101.386139h-101.386138zM424.30099 901.221386h-152.079208a25.245149 25.245149 0 0 1-25.346534-25.346535v-152.079207a25.245149 25.245149 0 0 1 25.346534-25.346535h152.079208a25.245149 25.245149 0 0 1 25.346535 25.346535v152.079207a25.346535 25.346535 0 0 1-25.346535 25.346535z m-126.327129-50.693069h101.386139v-101.386139h-101.386139zM748.635248 901.221386h-152.079208a25.346535 25.346535 0 0 1-25.346535-25.346535v-152.079207a25.245149 25.245149 0 0 1 25.346535-25.346535h152.079208a25.245149 25.245149 0 0 1 25.346534 25.346535v152.079207a25.346535 25.346535 0 0 1-25.346534 25.346535z m-126.327129-50.693069h101.386138v-101.386139h-101.386138zM382.732673 486.653465v31.429703a16.830099 16.830099 0 0 1-5.069307 12.166337 27.982574 27.982574 0 0 1-18.756435 6.184554 27.779802 27.779802 0 0 1-20.277228-5.069307 21.696634 21.696634 0 0 1-6.894257-17.337029V486.653465a81.108911 81.108911 0 0 1 7.299802-39.033663 82.731089 82.731089 0 0 1 20.277227-23.724356l12.064951-9.428911a121.663366 121.663366 0 0 0 20.784158-20.277228 29.503366 29.503366 0 0 0-7.401188-46.434852 58.499802 58.499802 0 0 0-30.415842-10.848316 55.863762 55.863762 0 0 0-32.646336 6.894257 53.02495 53.02495 0 0 0-18.249505 16.830099 68.53703 68.53703 0 0 0-9.428911 20.784158 64.58297 64.58297 0 0 1-5.474852 17.134258 16.323168 16.323168 0 0 1-8.820594 6.792871 33.254653 33.254653 0 0 1-11.152475 2.129109 29.40198 29.40198 0 0 1-16.424554-4.055445 20.277228 20.277228 0 0 1-8.820594-13.281585 54.34297 54.34297 0 0 1 0-22.102178 128.456238 128.456238 0 0 1 10.138614-31.733861A90.233663 90.233663 0 0 1 269.078812 314.29703a81.108911 81.108911 0 0 1 23.62297-16.931485 134.742178 134.742178 0 0 1 27.57703-9.530297 130.382574 130.382574 0 0 1 28.996436-3.95406 111.524752 111.524752 0 0 1 35.992079 5.069307 101.386139 101.386139 0 0 1 28.590891 13.687129 111.524752 111.524752 0 0 1 19.567525 16.931485A78.878416 78.878416 0 0 1 447.315644 344.712871a87.192079 87.192079 0 0 1 5.373465 34.268515 72.795248 72.795248 0 0 1-8.516436 32.240792 100.777822 100.777822 0 0 1-27.171485 28.590891c-13.180198 10.138614-21.291089 16.728713-24.434059 20.277228a29.40198 29.40198 0 0 0-7.299802 10.138614 48.05703 48.05703 0 0 0-2.534654 16.424554zM356.879208 624.741386a38.729505 38.729505 0 0 1-24.332673-8.820594 35.992079 35.992079 0 0 1-13.687129-25.954851 32.240792 32.240792 0 0 1 10.138614-28.286733 38.526733 38.526733 0 0 1 27.272871-11.456634 37.208713 37.208713 0 0 1 26.968713 10.949703A35.383762 35.383762 0 0 1 394.392079 588.039604a34.876832 34.876832 0 0 1-11.659406 26.563168 37.208713 37.208713 0 0 1-25.853465 10.138614z\" ></path></symbol><symbol id=\"icon-ms-material-lib\" viewBox=\"0 0 1024 1024\"><path d=\"M983.32700093 514.13668289a31.42179956 31.42179956 0 0 1-31.42179958-31.42180103V240.76702236a61.58672763 61.58672763 0 0 0-61.5867291-61.46104093H240.89270906a61.58672763 61.58672763 0 0 0-61.52388502 61.52388354v441.03638616l168.79791043-164.83876361c0.43990567-0.37706159 0.94265401-0.50274831 1.38255968-0.87980992 0.37706159-0.3142175 0.62843649-0.8798099 0.94265402-1.13118479 1.25687152-1.00549809 2.76511791-1.31971561 4.08483352-2.13668291 1.885308-1.1311848 3.6449293-2.2623696 5.7187681-2.89080462 1.9481521-0.62843649 3.83346009-0.8169673 5.84445481-1.1311848 2.01099472-0.2513749 3.89630272-0.50274831 5.90729743-0.43990567 2.07383881 0.0628441 3.95914682 0.69127913 5.970143 1.25687149 1.885308 0.50274831 3.770616 0.8169673 5.53023583 1.69677721 1.885308 0.8798099 3.45639851 2.2623696 5.0903316 3.51924259 1.31971561 0.8798099 2.82796201 1.44540231 4.0219909 2.57658711 0.37706159 0.50274831 0.50274831 1.06834071 0.87980991 1.44540231 0.3142175 0.3142175 0.8169673 0.50274831 1.1311848 0.87981138l144.91734287 180.92672427 149.065019-124.87023394v-0.12568669a31.29611285 31.29611285 0 0 1 44.36758218 3.9591468L951.90520135 840.04359265v-190.22757759a31.42179956 31.42179956 0 1 1 62.84359915 0v240.62814539A124.43032825 124.43032825 0 0 1 890.31847225 1014.7488005H240.89270906a124.05326663 124.05326663 0 0 1-122.79639513-108.84511443A124.11611073 124.11611073 0 0 1 9.2511995 783.04444686V133.55583955C9.2511995 65.05631641 64.99347232 9.2511995 133.68152775 9.2511995h649.42576319c63.22066222 0 115.00378823 47.76113659 122.79639513 108.84511443A124.05326663 124.05326663 0 0 1 1014.7488005 240.82986497v241.82217426a31.42179956 31.42179956 0 0 1-31.42179957 31.42179958zM116.46238083 240.76702236c0-68.49952463 55.80511692-124.30464154 124.43032823-124.30464153h600.15638168A60.83260443 60.83260443 0 0 0 783.04444686 72.09479865H133.55583955A61.58672763 61.58672763 0 0 0 72.09479865 133.61868366v649.4257632c0 27.90255844 19.04161083 50.5262545 44.49326887 58.1303306V240.76702236z m73.71554294 518.39685693a31.17042615 31.17042615 0 0 1-10.87194234 6.8499529v124.36748415c0 33.93554407 27.65118356 61.46104092 61.58672763 61.46104093H890.31847225a60.32985613 60.32985613 0 0 0 50.08635029-27.83971436l-235.41212704-279.96823856-126.06426137 105.64009082 40.84833958 50.9033161a31.29611285 31.29611285 0 0 1-24.50900404 51.09184691 31.48464367 31.48464367 0 0 1-24.50900405-11.81459633l-203.42473359-253.6996132-177.09326418 172.94558654z\" ></path><path d=\"M816.79146012 341.06540815a25.51450214 25.51450214 0 0 1-25.38881397-25.45165805 25.51450214 25.51450214 0 0 1 50.9033161 0 25.51450214 25.51450214 0 0 1-25.45165805 25.38881396m0-113.68407263c-48.6409465 0-88.29525867 39.59146809-88.29525867 88.29525867 0 48.6409465 39.59146809 88.23241457 88.29525867 88.23241457 48.6409465 0 88.29525867-39.59146809 88.29525867-88.23241457 0-48.70379059-39.65431217-88.29525867-88.29525867-88.29525867\" ></path></symbol><symbol id=\"icon-ms-log-user\" viewBox=\"0 0 1024 1024\"><path d=\"M773.474851 825.587327a114.870495 114.870495 0 1 1 114.870496-114.769109 114.971881 114.971881 0 0 1-114.870496 114.769109z m0-178.946535a64.177426 64.177426 0 1 0 64.177426 64.177426 64.278812 64.278812 0 0 0-64.177426-64.177426z\" ></path><path d=\"M937.61901 974.827723a25.346535 25.346535 0 0 1-25.346535-25.346535c0-68.334257-62.251089-123.893861-138.797624-123.893861s-138.696238 55.559604-138.696237 123.893861a25.346535 25.346535 0 0 1-50.693069 0c0-96.215446 84.961584-174.586931 189.389306-174.586931S963.168317 853.265743 963.168317 949.481188a25.346535 25.346535 0 0 1-25.549307 25.346535zM563.808317 1024H86.178218A25.346535 25.346535 0 0 1 60.831683 998.653465v-892.198019A25.346535 25.346535 0 0 1 86.178218 81.108911h114.870495a25.346535 25.346535 0 0 1 0 50.693069H111.524752v841.504951h452.283565a25.346535 25.346535 0 1 1 0 50.693069zM897.267327 583.578614a25.346535 25.346535 0 0 1-25.346535-25.346535V131.80198h-92.362772a25.346535 25.346535 0 0 1 0-50.693069H897.267327a25.346535 25.346535 0 0 1 25.346534 25.346535v451.776633a25.346535 25.346535 0 0 1-25.346534 25.346535z\" ></path><path d=\"M775.60396 212.910891h-567.762376a25.346535 25.346535 0 0 1-25.346534-25.346535v-162.217821A25.346535 25.346535 0 0 1 207.841584 0h567.762376A25.346535 25.346535 0 0 1 800.950495 25.346535v162.217821a25.346535 25.346535 0 0 1-25.346535 25.346535zM233.188119 162.217822h517.069307V50.693069H233.188119zM480.975842 344.712871h-253.465347a25.346535 25.346535 0 0 1 0-50.693069h253.465347a25.346535 25.346535 0 0 1 0 50.693069zM735.049505 425.821782H227.003564a25.346535 25.346535 0 0 1 0-50.693069H735.049505a25.346535 25.346535 0 0 1 0 50.693069zM480.975842 593.717228h-253.465347a25.346535 25.346535 0 0 1 0-50.69307h253.465347a25.346535 25.346535 0 0 1 0 50.69307zM613.588911 674.826139H227.003564a25.346535 25.346535 0 0 1 0-50.69307h386.585347a25.346535 25.346535 0 1 1 0 50.69307zM480.975842 828.020594h-253.465347a25.346535 25.346535 0 0 1 0-50.693069h253.465347a25.346535 25.346535 0 0 1 0 50.693069zM559.448713 909.129505H227.003564a25.346535 25.346535 0 0 1 0-50.693069h332.445149a25.346535 25.346535 0 0 1 0 50.693069z\" ></path></symbol><symbol id=\"icon-ms-folder-share\" viewBox=\"0 0 1231 1024\"><path d=\"M1124.891879 1024H106.296675A106.418575 106.418575 0 0 1 0 917.703325V164.606009a30.474964 30.474964 0 0 1 60.949928 0v753.097316A45.468647 45.468647 0 0 0 106.296675 963.050072h1018.595204A45.468647 45.468647 0 0 0 1170.238626 917.703325V240.42772A45.468647 45.468647 0 0 0 1124.891879 195.080973H664.35422a30.474964 30.474964 0 0 1 0-60.949928h460.537659a106.418575 106.418575 0 0 1 106.296676 106.296675v677.275605A106.418575 106.418575 0 0 1 1124.891879 1024z\" ></path><path d=\"M664.35422 195.080973a30.474964 30.474964 0 0 1-20.601076-8.04539l-114.220166-104.711977A85.3299 85.3299 0 0 0 472.727645 60.991131H103.614878A40.105053 40.105053 0 0 0 60.949928 97.561088v67.044921a30.474964 30.474964 0 0 1-60.949928 0V97.561088a100.811182 100.811182 0 0 1 103.614878-97.519886h369.112767a144.207531 144.207531 0 0 1 97.519886 37.423256l114.220165 104.711977A30.474964 30.474964 0 0 1 664.35422 195.080973zM420.554506 731.440343A127.99485 127.99485 0 1 1 548.549356 603.445494 128.11675 128.11675 0 0 1 420.554506 731.440343z m0-195.039771a67.044921 67.044921 0 1 0 67.044922 67.044922 67.166821 67.166821 0 0 0-67.044922-67.044922zM694.097785 494.832721a103.614878 103.614878 0 1 1 103.614878-103.614878 103.736778 103.736778 0 0 1-103.614878 103.614878z m0-146.279828a42.66495 42.66495 0 1 0 42.66495 42.66495 42.66495 42.66495 0 0 0-42.66495-42.66495zM798.444063 853.3402A127.99485 127.99485 0 1 1 926.438912 725.345351 128.11675 128.11675 0 0 1 798.444063 853.3402z m0-195.039771a67.044921 67.044921 0 1 0 67.044921 67.044922 67.166821 67.166821 0 0 0-67.044921-67.044922z\" ></path><path d=\"M516.245894 552.613253a30.353064 30.353064 0 0 1-17.919279-54.976835l104.224378-76.30931a30.474964 30.474964 0 0 1 36.569957 48.759942l-104.224378 76.309311a30.109265 30.109265 0 0 1-18.650678 6.216892zM687.393293 743.630329a30.962564 30.962564 0 0 1-10.361488-1.828498l-169.318901-60.949928a30.474964 30.474964 0 0 1 20.722976-57.292933l169.318901 60.949929a30.474964 30.474964 0 0 1-10.361488 59.12143z\" ></path></symbol><symbol id=\"icon-ms-user-group\" viewBox=\"0 0 1152 1024\"><path d=\"M575.185506 631.628823A265.05154 265.05154 0 1 1 840.118719 366.813937a265.288193 265.288193 0 0 1-264.933213 264.814886z m0-470.821462A205.88825 205.88825 0 1 0 780.955429 366.813937a206.006576 206.006576 0 0 0-205.769923-206.006576z\" ></path><path d=\"M1006.840871 1023.999763a29.463318 29.463318 0 0 1-29.581645-29.581645c0-200.090247-180.448035-362.789295-402.310373-362.789295s-402.310373 162.699048-402.310372 362.789295a29.581645 29.581645 0 0 1-59.163291 0c0-232.748383 206.834862-421.952585 461.473663-421.952585s461.473663 189.322528 461.473663 421.952585a29.581645 29.581645 0 0 1-29.581645 29.581645zM278.659096 404.205136a30.291605 30.291605 0 0 1-14.080863-3.549797A212.987844 212.987844 0 0 1 366.102439 0.001538a210.976293 210.976293 0 0 1 127.67438 42.479243 29.581645 29.581645 0 1 1-35.497974 47.330632 153.824554 153.824554 0 1 0-165.657212 258.780231 29.581645 29.581645 0 0 1-14.080863 55.613492z\" ></path><path d=\"M29.581645 708.659427a29.581645 29.581645 0 0 1-29.581645-29.581645c0-148.736511 108.860454-281.380608 264.578233-322.558258A29.581645 29.581645 0 0 1 279.724036 414.144569C149.919777 447.985971 59.16329 557.083078 59.16329 679.077782a29.581645 29.581645 0 0 1-29.581645 29.581645zM873.013509 404.205136a29.581645 29.581645 0 0 1-14.19919-55.613492 153.824554 153.824554 0 1 0-165.657212-258.780231 29.581645 29.581645 0 0 1-35.497974-47.330632A212.987844 212.987844 0 1 1 887.449352 400.655339a30.291605 30.291605 0 0 1-14.435843 3.549797z\" ></path><path d=\"M1122.09096 708.659427a29.581645 29.581645 0 0 1-29.581645-29.581645c0-121.994704-90.756487-231.091811-220.560745-265.288193A29.581645 29.581645 0 0 1 887.449352 356.519524c155.836106 41.17765 264.69656 173.821746 264.696559 322.558258a29.581645 29.581645 0 0 1-30.054951 29.581645z\" ></path></symbol><symbol id=\"icon-ms-log\" viewBox=\"0 0 1024 1024\"><path d=\"M917.544554 1024h-811.089108A25.346535 25.346535 0 0 1 81.108911 998.653465v-892.198019A25.346535 25.346535 0 0 1 106.455446 81.108911h114.870495a25.346535 25.346535 0 0 1 0 50.693069H131.80198v841.504951h760.39604V131.80198h-92.362772a25.346535 25.346535 0 0 1 0-50.693069H917.544554a25.346535 25.346535 0 0 1 25.346535 25.346535v892.198019a25.346535 25.346535 0 0 1-25.346535 25.346535z\" ></path><path d=\"M795.881188 212.910891h-567.762376a25.346535 25.346535 0 0 1-25.346535-25.346535v-162.217821A25.346535 25.346535 0 0 1 228.118812 0h567.762376A25.346535 25.346535 0 0 1 821.227723 25.346535v162.217821a25.346535 25.346535 0 0 1-25.346535 25.346535zM253.465347 162.217822h517.069306V50.693069H253.465347zM593.108911 375.128713h-162.217822a25.346535 25.346535 0 0 1 0-50.693069h162.217822a25.346535 25.346535 0 0 1 0 50.693069zM755.326733 456.237624h-324.435644a25.346535 25.346535 0 0 1 0-50.69307h324.435644a25.346535 25.346535 0 0 1 0 50.69307zM593.108911 618.455446h-162.217822a25.346535 25.346535 0 0 1 0-50.69307h162.217822a25.346535 25.346535 0 0 1 0 50.69307zM755.326733 699.564356h-324.435644a25.346535 25.346535 0 0 1 0-50.693069h324.435644a25.346535 25.346535 0 0 1 0 50.693069zM349.782178 699.564356h-121.663366a25.346535 25.346535 0 0 1-25.346535-25.346534v-121.663367a25.346535 25.346535 0 0 1 25.346535-25.346534h121.663366a25.346535 25.346535 0 0 1 25.346535 25.346534v121.663367a25.346535 25.346535 0 0 1-25.346535 25.346534zM253.465347 648.871287h70.970297v-70.970297h-70.970297zM349.782178 456.237624h-121.663366a25.346535 25.346535 0 0 1-25.346535-25.346535v-121.663366a25.346535 25.346535 0 0 1 25.346535-25.346535h121.663366a25.346535 25.346535 0 0 1 25.346535 25.346535v121.663366a25.346535 25.346535 0 0 1-25.346535 25.346535zM253.465347 405.544554h70.970297v-70.970297h-70.970297z\" ></path></symbol><symbol id=\"icon-ms-data-right\" viewBox=\"0 0 1024 1024\"><path d=\"M495.056495 1024C267.454021 1024 24.649897 962.982268 24.649897 849.814433a26.391753 26.391753 0 0 1 52.783505 0C77.433402 900.486598 236.311753 971.216495 495.056495 971.216495c16.574021 0 21.113402 0 30.825567-0.950103l16.046185-0.950103a26.391753 26.391753 0 1 1 2.955877 52.783505l-15.412784 0.950103c-10.451134 0.950103-16.151753 0.950103-34.414845 0.950103zM495.056495 798.825567C267.454021 798.825567 24.649897 737.702268 24.649897 624.64a26.391753 26.391753 0 0 1 52.783505 0c0 50.672165 158.878351 121.402062 417.623093 121.402062H529.049072a26.391753 26.391753 0 1 1 1.900206 52.783505l-10.556701 0.527835c-8.12866-0.738969-12.245773-0.527835-25.336082-0.527835zM495.056495 573.545567C267.454021 573.545567 24.649897 512.527835 24.649897 399.36a26.391753 26.391753 0 0 1 52.783505 0c0 50.672165 158.878351 121.402062 417.623093 121.402062a1233.867216 1233.867216 0 0 0 162.150928-10.556701 26.391753 26.391753 0 1 1 6.967422 52.25567 1266.065155 1266.065155 0 0 1-169.11835 11.084536zM495.056495 348.371134C267.454021 348.371134 24.649897 287.353402 24.649897 174.185567S267.454021 0 495.056495 0s470.301031 61.017732 470.301031 174.185567S722.97567 348.371134 495.056495 348.371134z m0-295.587629C236.311753 52.783505 77.433402 123.513402 77.433402 174.185567S236.311753 295.587629 495.056495 295.587629s417.517526-70.729897 417.517526-121.402062S753.69567 52.783505 495.056495 52.783505z\" ></path><path d=\"M51.041649 876.206186A26.391753 26.391753 0 0 1 24.649897 849.814433v-675.628866a26.391753 26.391753 0 0 1 52.783505 0v675.628866A26.391753 26.391753 0 0 1 51.041649 876.206186zM938.965773 619.361649a26.391753 26.391753 0 0 1-26.391752-26.391752V174.185567a26.391753 26.391753 0 0 1 52.783505 0v418.78433a26.391753 26.391753 0 0 1-26.391753 26.391752zM972.958351 992.329897H610.546804a26.391753 26.391753 0 0 1-26.391752-26.391753v-253.360824a26.391753 26.391753 0 0 1 26.391752-26.391753h362.411547a26.391753 26.391753 0 0 1 26.391752 26.391753v253.360824a26.391753 26.391753 0 0 1-26.391752 26.391753zM636.938557 939.546392h309.628041V738.969072H636.938557z\" ></path><path d=\"M707.351753 711.627216a26.391753 26.391753 0 0 1-26.391753-26.391752V628.123711a110.845361 110.845361 0 0 1 221.690722 0v56.267217a26.391753 26.391753 0 0 1-52.783506 0V628.123711a58.061856 58.061856 0 0 0-116.123711 0v57.111753a26.391753 26.391753 0 0 1-26.391752 26.391752zM791.805361 900.803299a26.391753 26.391753 0 0 1-26.391753-26.391753V797.030928a26.391753 26.391753 0 0 1 52.783505 0v77.380618a26.391753 26.391753 0 0 1-26.391752 26.391753z\" ></path></symbol><symbol id=\"icon-ms-sys-options\" viewBox=\"0 0 1078 1024\"><path d=\"M539.004296 712.307939a198.658024 198.658024 0 1 1 198.658024-198.544764 198.884544 198.884544 0 0 1-198.658024 198.544764z m0-340.572793a142.028029 142.028029 0 1 0 142.028029 142.028029 142.141289 142.141289 0 0 0-142.028029-142.028029z\" ></path><path d=\"M373.75797 1023.999434a28.768038 28.768038 0 0 1-9.174059-1.47238 535.493237 535.493237 0 0 1-186.539205-110.088711 28.201738 28.201738 0 0 1-2.71824-39.301217A141.688249 141.688249 0 0 0 43.265317 641.860225a28.314998 28.314998 0 0 1-32.618878-22.651999 547.385536 547.385536 0 0 1-10.646439-106.464391 541.042976 541.042976 0 0 1 11.325999-109.748931 28.428258 28.428258 0 0 1 32.958657-22.651998 141.688249 141.688249 0 0 0 133.98657-230.484082A28.314998 28.314998 0 0 1 181.215985 110.444347 537.645177 537.645177 0 0 1 369.00105 1.488236a28.201738 28.201738 0 0 1 35.790157 17.781819 141.801509 141.801509 0 0 0 134.213089 96.270992 141.914769 141.914769 0 0 0 134.32635-96.270992A28.201738 28.201738 0 0 1 709.120803 1.488236a535.040197 535.040197 0 0 1 188.691144 109.635671 28.314998 28.314998 0 0 1 2.15194 40.094037A141.801509 141.801509 0 0 0 1034.176976 385.099825a28.428258 28.428258 0 0 1 33.977998 22.651998 539.230816 539.230816 0 0 1 10.533179 105.671572 545.573376 545.573376 0 0 1-12.005559 113.259991A28.314998 28.314998 0 0 1 1053.317915 643.445864a28.654778 28.654778 0 0 1-21.292878 3.9641 143.047368 143.047368 0 0 0-118.583211 28.201738 28.314998 28.314998 0 1 1-35.563637-44.171397 197.978464 197.978464 0 0 1 137.157849-43.491836 473.879802 473.879802 0 0 0 1.01934-143.726928A198.544764 198.544764 0 0 1 840.049352 135.927845a475.691962 475.691962 0 0 0-124.58599-72.259874 198.431504 198.431504 0 0 1-176.685586 108.050032A198.431504 198.431504 0 0 1 362.431971 64.121011 475.691962 475.691962 0 0 0 237.845981 135.927845 198.318244 198.318244 0 0 1 62.179735 439.691141a482.034521 482.034521 0 0 0 0 143.613668 198.204984 198.204984 0 0 1 173.287786 303.650036 478.523461 478.523461 0 0 0 123.67991 73.052694 199.111064 199.111064 0 0 1 174.646906-104.652232 196.845864 196.845864 0 0 1 70.560974 13.024899 28.314998 28.314998 0 1 1-20.160278 52.892416 141.574989 141.574989 0 0 0-183.594445 84.152173A28.428258 28.428258 0 0 1 373.75797 1023.999434zM1008.919999 989.341876H679.559945a28.314998 28.314998 0 1 1 0-56.629995h328.453974a28.314998 28.314998 0 1 1 0 56.629995z\" ></path><path d=\"M1008.919999 875.175806H679.559945a28.314998 28.314998 0 0 1 0-56.629996h328.453974a28.314998 28.314998 0 0 1 0 56.629996zM1008.919999 761.122995H679.559945a28.314998 28.314998 0 0 1 0-56.629995h328.453974a28.314998 28.314998 0 0 1 0 56.629995z\" ></path></symbol><symbol id=\"icon-ms-user\" viewBox=\"0 0 1024 1024\"><path d=\"M512 583.569892A291.784946 291.784946 0 1 1 803.784946 291.784946 292.115269 292.115269 0 0 1 512 583.569892z m0-528.516129A236.731183 236.731183 0 1 0 748.731183 291.784946 236.951398 236.951398 0 0 0 512 55.053763z\" ></path><path d=\"M996.473118 1024a27.526882 27.526882 0 0 1-27.526881-27.526882C968.946237 768.770753 763.926022 583.569892 512 583.569892S55.053763 768.770753 55.053763 996.473118a27.526882 27.526882 0 0 1-55.053763 0C0 738.491183 229.684301 528.516129 512 528.516129S1024 738.491183 1024 996.473118a27.526882 27.526882 0 0 1-27.526882 27.526882z\" ></path></symbol><symbol id=\"icon-ms-layer\" viewBox=\"0 0 1024 1024\"><path d=\"M512 516.64213333a172.94222187 172.94222187 0 0 1-60.4387552-11.01368853L60.8028448 358.44551147a73.45493333 73.45493333 0 0 1 0-138.8088896l390.7584-147.18293334a171.3948448 171.3948448 0 0 1 120.96853333 0l390.66737707 147.18293334a73.45493333 73.45493333 0 0 1 0 138.8088896L572.4387552 505.6284448A172.94222187 172.94222187 0 0 1 512 516.64213333z m-427.8044448-227.5555552s0.8192 0.54613333 2.27555627 1.09226667l390.66737706 147.2739552a100.1244448 100.1244448 0 0 0 69.632 0l390.7584-147.2739552a4.64213333 4.64213333 0 0 0 2.27555627-1.36533333 9.10222187 9.10222187 0 0 0-2.27555627-1.09226667L546.86151147 140.53831147a100.67057813 100.67057813 0 0 0-69.632 0L86.47111147 287.81226667a4.64213333 4.64213333 0 0 0-2.27555627 1.36533333z\" ></path><path d=\"M512 737.64408853a170.66666667 170.66666667 0 0 1-60.4387552-11.01368853L60.8028448 579.44746667a36.40888853 36.40888853 0 0 1 25.66826667-68.1756448l390.66737706 147.18293333a100.1244448 100.1244448 0 0 0 69.632 0l390.7584-147.2739552a36.40888853 36.40888853 0 0 1 25.66826667 68.1756448L572.4387552 726.6304A172.94222187 172.94222187 0 0 1 512 737.64408853z\" ></path><path d=\"M512 962.65102187a172.94222187 172.94222187 0 0 1-60.4387552-11.01368854L60.8028448 804.4544a36.40888853 36.40888853 0 0 1 25.66826667-68.1756448l390.66737706 147.18293333a100.67057813 100.67057813 0 0 0 69.632 0l390.7584-147.2739552a36.40888853 36.40888853 0 0 1 25.66826667 68.1756448L572.4387552 951.63733333a172.94222187 172.94222187 0 0 1-60.4387552 11.01368854z\" ></path></symbol><symbol id=\"icon-ms-uploads\" viewBox=\"0 0 1024 1024\"><path d=\"M702.60053333 921.6a36.40888853 36.40888853 0 0 1 0-72.81777813 238.29617813 238.29617813 0 0 0 217.7251552-136.53333334 218.45333333 218.45333333 0 0 0 19.93386667-91.02222186 228.64782187 228.64782187 0 0 0-134.53084373-205.98328854A36.40888853 36.40888853 0 0 1 785.06666667 385.11502187c-9.10222187-118.32888853-113.41368853-210.26133333-236.65777814-210.26133334-131.072 0-237.65902187 102.2179552-237.65902186 227.55555627a224.18773333 224.18773333 0 0 0 1.0012448 23.7568 36.40888853 36.40888853 0 0 1-9.10222294 27.30666667A36.40888853 36.40888853 0 0 1 276.61653333 466.48888853C168.48213333 470.58488853 84.1955552 554.4163552 84.1955552 657.6355552a182.0444448 182.0444448 0 0 0 19.38773333 81.92 203.1616 203.1616 0 0 0 182.0444448 109.22666667h56.61582187a36.40888853 36.40888853 0 0 1 0 72.81777813h-57.344A276.61653333 276.61653333 0 0 1 37.95626667 771.77742187 253.67893333 253.67893333 0 0 1 11.37777813 657.6355552c0-130.52586667 96.4835552-238.66026667 226.00817707-260.23253333C240.38968853 234.01813333 378.4704 102.4 547.8627552 102.4c153.8275552 0 284.80853333 111.04711147 307.01795627 256.50062187a300.91946667 300.91946667 0 0 1 158.19662186 262.05297813 290.72497813 290.72497813 0 0 1-26.48746666 121.51466667A311.296 311.296 0 0 1 702.60053333 921.6z\" ></path><path d=\"M517.00622187 921.6a36.40888853 36.40888853 0 0 1-36.40888854-36.40888853l2.91271147-273.06666667-54.61333333 52.79288853a36.40888853 36.40888853 0 1 1-50.42631147-52.79288853l116.9635552-113.77777813A36.40888853 36.40888853 0 0 1 557.51111147 524.9251552l-3.82293334 360.99413333a36.40888853 36.40888853 0 0 1-36.68195626 35.68071147z\" ></path><path d=\"M638.3388448 674.65671147a36.40888853 36.40888853 0 0 1-25.30417813-10.28551147L495.88906667 550.6844448a36.40888853 36.40888853 0 1 1 50.69937813-52.24675627L663.7340448 612.1244448a36.40888853 36.40888853 0 0 1-25.3952 62.53226667z\" ></path></symbol><symbol id=\"icon-ms-download\" viewBox=\"0 0 1024 1024\"><path d=\"M702.60053333 876.08888853a32.5859552 32.5859552 0 1 1 0-64.7168c94.3900448 0 179.85991147-47.6956448 217.7251552-121.42364373a175.9459552 175.9459552 0 0 0 19.93386667-81.1008c0-77.27786667-52.79288853-148.9123552-134.53084373-182.59057813A32.67697813 32.67697813 0 0 1 785.06666667 399.49653333c-9.10222187-104.76657813-113.41368853-186.86862187-236.65777814-186.86862186-131.072 0-237.65902187 91.02222187-237.65902186 202.52444373a178.22151147 178.22151147 0 0 0 1.18328853 20.93511147 29.76426667 29.76426667 0 0 1-9.10222187 24.576 38.5024 38.5024 0 0 1-26.12337813 11.19573333C168.48213333 475.59111147 84.1955552 550.04728853 84.1955552 641.52462187a146.54577813 146.54577813 0 0 0 19.38773333 72.81777813c33.13208853 58.9824 104.49351147 97.12071147 182.0444448 97.12071147h56.61582187a32.5859552 32.5859552 0 1 1 0 64.7168h-57.344c-104.58453333 0-201.5232-52.15573333-246.94328853-132.8924448A205.16408853 205.16408853 0 0 1 11.37777813 641.52462187C11.37777813 525.7443552 107.86133333 430.08 237.3859552 410.4192 240.38968853 265.2387552 378.4704 147.91111147 547.8627552 147.91111147c153.8275552 0 284.80853333 98.75911147 307.01795627 227.5555552 96.75662187 46.96746667 158.19662187 136.53333333 158.19662186 232.92586666a234.56426667 234.56426667 0 0 1-26.48746666 108.04337814C936.89173333 813.55662187 825.38951147 876.08888853 702.60053333 876.08888853z\" ></path><path d=\"M517.00622187 442.27697813a36.40888853 36.40888853 0 0 0-36.40888854 36.40888854l2.91271147 273.06666666-54.61333333-52.79288853a36.40888853 36.40888853 0 0 0-50.69937814 52.2467552l116.9635552 113.77777813A36.40888853 36.40888853 0 0 0 557.51111147 839.68l-4.096-361.35822187a36.40888853 36.40888853 0 0 0-36.4088896-36.0448z\" ></path><path d=\"M638.3388448 689.67537813a36.40888853 36.40888853 0 0 0-25.30417813 10.2855104L495.88906667 813.55662187a36.40888853 36.40888853 0 1 0 50.69937813 52.24675626l117.1456-113.59573333a36.40888853 36.40888853 0 0 0-25.3952-62.53226667z\" ></path></symbol><symbol id=\"icon-ms-xitong\" viewBox=\"0 0 1024 1024\"><path d=\"M352 448h-256A96 96 0 0 1 0 352v-256A96 96 0 0 1 96 0h256A96 96 0 0 1 448 96v256A96 96 0 0 1 352 448z m-256-384a32 32 0 0 0-32 32v256a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32v-256a32 32 0 0 0-32-32zM800 448A224 224 0 1 1 1024 224 224 224 0 0 1 800 448z m0-384A160 160 0 1 0 960 224 160 160 0 0 0 800 64zM352 1024h-256A96 96 0 0 1 0 928v-256A96 96 0 0 1 96 576h256A96 96 0 0 1 448 672v256A96 96 0 0 1 352 1024z m-256-384a32 32 0 0 0-32 32v256a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32v-256a32 32 0 0 0-32-32zM928 1024h-256A96 96 0 0 1 576 928v-256A96 96 0 0 1 672 576h256a96 96 0 0 1 96 96v256a96 96 0 0 1-96 96z m-256-384a32 32 0 0 0-32 32v256a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32v-256a32 32 0 0 0-32-32z\" ></path></symbol></svg>',(c=>{var a=(h=(h=document.getElementsByTagName(\"script\"))[h.length-1]).getAttribute(\"data-injectcss\"),h=h.getAttribute(\"data-disable-injectsvg\");if(!h){var t,o,z,l,s,v=function(a,h){h.parentNode.insertBefore(a,h)};if(a&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(a){console&&console.log(a)}}t=function(){var a,h=document.createElement(\"div\");h.innerHTML=c._iconfont_svg_string_2806063,(h=h.getElementsByTagName(\"svg\")[0])&&(h.setAttribute(\"aria-hidden\",\"true\"),h.style.position=\"absolute\",h.style.width=0,h.style.height=0,h.style.overflow=\"hidden\",h=h,(a=document.body).firstChild?v(h,a.firstChild):a.appendChild(h))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(t,0):(o=function(){document.removeEventListener(\"DOMContentLoaded\",o,!1),t()},document.addEventListener(\"DOMContentLoaded\",o,!1)):document.attachEvent&&(z=t,l=c.document,s=!1,e(),l.onreadystatechange=function(){\"complete\"==l.readyState&&(l.onreadystatechange=null,m())})}function m(){s||(s=!0,z())}function e(){try{l.documentElement.doScroll(\"left\")}catch(a){return void setTimeout(e,50)}m()}})(window);\n","window._iconfont_svg_string_1032790='<svg><symbol id=\"icon-doc-flex-right\" viewBox=\"0 0 1024 1024\"><path d=\"M961.9936676 9.2511995a31.42179956 31.42179956 0 0 0-31.42179958 31.42179957v942.65400186a31.42179956 31.42179956 0 1 0 62.84359915 0v-942.65400186a31.42179956 31.42179956 0 0 0-31.42179957-31.42179957zM113.60506592 574.84360061a62.84360061 62.84360061 0 0 0-62.8436006 62.84359914v125.68720124a62.84360061 62.84360061 0 0 0 62.8436006 62.84359915h628.43600174a62.84360061 62.84360061 0 0 0 62.84359915-62.84359915v-125.68720124a62.84360061 62.84360061 0 0 0-62.84359915-62.84359914H113.60506592z m314.21800014-377.06160075a62.84360061 62.84360061 0 0 0-62.84359914 62.84359915v125.68720124a62.84360061 62.84360061 0 0 0 62.84359914 62.84359914h314.2180016a62.84360061 62.84360061 0 0 0 62.84359915-62.84359914V260.62559901a62.84360061 62.84360061 0 0 0-62.84359915-62.84359915h-314.2180016z\" ></path></symbol><symbol id=\"icon-doc-flex-h-center\" viewBox=\"0 0 1024 1024\"><path d=\"M1014.7488005 512a31.42179956 31.42179956 0 0 1-31.42179957 31.42179956H826.21800014v125.68720124a62.84360061 62.84360061 0 0 1-62.84359915 62.84359914h-125.68720124a62.84360061 62.84360061 0 0 1-62.84359914-62.84359914v-125.68720124h-125.68720122V826.21800014a62.84360061 62.84360061 0 0 1-62.84359914 62.84360061H260.62559901a62.84360061 62.84360061 0 0 1-62.84359915-62.84360061v-282.79620058H40.67299907a31.42179956 31.42179956 0 1 1 0-62.84359912H197.78199986V197.78199986a62.84360061 62.84360061 0 0 1 62.84359915-62.84360061h125.68720124a62.84360061 62.84360061 0 0 1 62.84359914 62.84360061v282.79620058h125.68720122v-125.68720124a62.84360061 62.84360061 0 0 1 62.84359914-62.84359914h125.68720124a62.84360061 62.84360061 0 0 1 62.84359915 62.84359914v125.68720124h157.10900079a31.42179956 31.42179956 0 0 1 31.42179957 31.42179956z\" ></path></symbol><symbol id=\"icon-doc-flex-v-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M229.20379943 9.2511995a31.42179956 31.42179956 0 0 1 31.42179958 31.42179957v942.65400186a31.42179956 31.42179956 0 1 1-62.84359915 0v-942.65400186a31.42179956 31.42179956 0 0 1 31.42179957-31.42179957z m565.59240114 0a31.42179956 31.42179956 0 0 1 31.42179957 31.42179957v942.65400186a31.42179956 31.42179956 0 1 1-62.84359915 0v-942.65400186a31.42179956 31.42179956 0 0 1 31.42179958-31.42179957zM574.84360061 134.93839925a62.84360061 62.84360061 0 0 1 62.84359914 62.84360061v628.43600028a62.84360061 62.84360061 0 0 1-62.84359914 62.84360061h-125.68720122a62.84360061 62.84360061 0 0 1-62.84359914-62.84360061V197.78199986a62.84360061 62.84360061 0 0 1 62.84359914-62.84360061h125.68720122z\" ></path></symbol><symbol id=\"icon-doc-flex-bottom\" viewBox=\"0 0 1024 1024\"><path d=\"M1021.89800896 951.90520135a31.42179956 31.42179956 0 0 0-31.42180105-31.42180102H47.82220606a31.42179956 31.42179956 0 1 0 0 62.8436006h942.65400185a31.42179956 31.42179956 0 0 0 31.42180105-31.42179958z m-565.59240111-848.38860168a62.84360061 62.84360061 0 0 0-62.84360063-62.8436006h-125.68719974a62.84360061 62.84360061 0 0 0-62.84360063 62.8436006v628.43600027a62.84360061 62.84360061 0 0 0 62.84360063 62.84360063h125.68719974a62.84360061 62.84360061 0 0 0 62.84360063-62.84360063v-628.43600027z m377.06160074 314.21800014a62.84360061 62.84360061 0 0 0-62.84360062-62.84360061h-125.68719977a62.84360061 62.84360061 0 0 0-62.84360059 62.84360061v314.21800013a62.84360061 62.84360061 0 0 0 62.84360059 62.84360063h125.68719977a62.84360061 62.84360061 0 0 0 62.84360062-62.84360063v-314.21800013z\" ></path></symbol><symbol id=\"icon-doc-flex-h-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M1014.7488005 229.20379943a31.42179956 31.42179956 0 0 1-31.42179957 31.42179958h-942.65400186a31.42179956 31.42179956 0 0 1 0-62.84359915h942.65400186a31.42179956 31.42179956 0 0 1 31.42179957 31.42179957z m0 565.59240114a31.42179956 31.42179956 0 0 1-31.42179957 31.42179957h-942.65400186a31.42179956 31.42179956 0 1 1 0-62.84359915h942.65400186a31.42179956 31.42179956 0 0 1 31.42179957 31.42179958zM889.06160075 574.84360061a62.84360061 62.84360061 0 0 1-62.84360061 62.84359914H197.78199986a62.84360061 62.84360061 0 0 1-62.84360061-62.84359914v-125.68720122a62.84360061 62.84360061 0 0 1 62.84360061-62.84359914h628.43600028a62.84360061 62.84360061 0 0 1 62.84360061 62.84359914v125.68720122z\" ></path></symbol><symbol id=\"icon-doc-flex-v-center\" viewBox=\"0 0 1024 1024\"><path d=\"M512 9.2511995a31.42179956 31.42179956 0 0 1 31.42179956 31.42179957V197.78199986h125.68720124a62.84360061 62.84360061 0 0 1 62.84359914 62.84359915v125.68720124a62.84360061 62.84360061 0 0 1-62.84359914 62.84359914h-125.68720124v125.68720122H826.21800014a62.84360061 62.84360061 0 0 1 62.84360061 62.84359914v125.68720124a62.84360061 62.84360061 0 0 1-62.84360061 62.84359915h-282.79620058v157.10900079a31.42179956 31.42179956 0 1 1-62.84359912 0V826.21800014H197.78199986a62.84360061 62.84360061 0 0 1-62.84360061-62.84359915v-125.68720124a62.84360061 62.84360061 0 0 1 62.84360061-62.84359914h282.79620058v-125.68720122h-125.68720124a62.84360061 62.84360061 0 0 1-62.84359914-62.84359914V260.62559901a62.84360061 62.84360061 0 0 1 62.84359914-62.84359915h125.68720124V40.67299907A31.42179956 31.42179956 0 0 1 512 9.2511995z\" ></path></symbol><symbol id=\"icon-doc-flex-top\" viewBox=\"0 0 1024 1024\"><path d=\"M1014.7488005 103.51659967a31.42179956 31.42179956 0 0 1-31.42179957 31.42179958h-942.65400186a31.42179956 31.42179956 0 0 1 0-62.8436006h942.65400186a31.42179956 31.42179956 0 0 1 31.42179957 31.42180102zM449.15639939 951.90520135a62.84360061 62.84360061 0 0 1-62.84359914 62.84359915H260.62559901a62.84360061 62.84360061 0 0 1-62.84359915-62.84359915V323.46919964a62.84360061 62.84360061 0 0 1 62.84359915-62.84360063h125.68720124a62.84360061 62.84360061 0 0 1 62.84359914 62.84360063v628.43600171z m377.06160075-314.2180016a62.84360061 62.84360061 0 0 1-62.84359915 62.84360061h-125.68720124a62.84360061 62.84360061 0 0 1-62.84359914-62.84360061V323.46919964a62.84360061 62.84360061 0 0 1 62.84359914-62.84360063h125.68720124a62.84360061 62.84360061 0 0 1 62.84359915 62.84360063v314.21800011z\" ></path></symbol><symbol id=\"icon-doc-flex-left\" viewBox=\"0 0 1024 1024\"><path d=\"M103.51659967 9.2511995a31.42179956 31.42179956 0 0 1 31.42179958 31.42179957v942.65400186a31.42179956 31.42179956 0 1 1-62.8436006 0v-942.65400186a31.42179956 31.42179956 0 0 1 31.42180102-31.42179957zM951.90520135 574.84360061a62.84360061 62.84360061 0 0 1 62.84359915 62.84359914v125.68720124a62.84360061 62.84360061 0 0 1-62.84359915 62.84359915H323.46919964a62.84360061 62.84360061 0 0 1-62.84360063-62.84359915v-125.68720124a62.84360061 62.84360061 0 0 1 62.84360063-62.84359914h628.43600171z m-314.2180016-377.06160075a62.84360061 62.84360061 0 0 1 62.84360061 62.84359915v125.68720124a62.84360061 62.84360061 0 0 1-62.84360061 62.84359914H323.46919964a62.84360061 62.84360061 0 0 1-62.84360063-62.84359914V260.62559901a62.84360061 62.84360061 0 0 1 62.84360063-62.84359915h314.21800011z\" ></path></symbol><symbol id=\"icon-doc-bold\" viewBox=\"0 0 1024 1024\"><path d=\"M142.61369761 16.82764963h438.01151373c80.79173234 0 145.57929447 20.32780987 194.39620305 60.96667126 48.80015029 40.65561971 73.21698372 102.07476491 73.21698372 184.29095214 0 49.88943936-11.16102338 92.62308743-33.44955358 128.16742768-22.30528847 35.57785681-54.0790127 63.04469965-95.30441436 82.45080338v2.7651184c55.5369842 12.95416076 97.61705885 41.81194194 126.22346565 86.6068601 28.60640678 44.81167648 42.91798932 100.93520094 42.91798931 168.35381518 0 38.79544914-6.3178766 75.06039599-18.93687152 108.77808224-12.61899489 33.73444454-32.41053936 62.82684183-59.32435852 87.29395013-26.94733573 24.48386661-61.43590348 43.88997033-103.49921983 58.20155287-42.09683295 14.32834082-92.15385521 21.48413209-150.20458343 21.48413212H142.61369761V16.82764963z m157.77933205 414.29852862h257.50793585c37.87374301 0 69.42960942-11.78108025 94.66759924-35.32648241 25.23798981-23.56216047 37.87374301-57.49770454 37.87374303-101.84014881 0-49.88943936-11.3621229-84.98130565-34.08636872-105.30911552-22.72424581-20.31105155-55.5369842-30.48333565-98.45497355-30.48333564H300.39302966V431.12617825z m0 433.70463232h278.95855139c47.96223561 0 85.19916349-13.62449251 111.71078356-40.87347754 26.51162012-27.23222671 39.76743015-65.80981804 39.76743016-115.69925739 0-48.95097492-13.25581005-86.60686012-39.76743016-112.934139s-63.74854797-39.48253918-111.71078356-39.48253918H300.39302966V864.83081057z\" ></path></symbol><symbol id=\"icon-doc-doc-italic\" viewBox=\"0 0 1024 1024\"><path d=\"M686.541275-0.60103889l-185.08544421 1018.05574565H340.77642019l185.08544425-1018.05574565h160.67941056z\" ></path><path d=\"M889.51176574 134.52830521H273.77423097l26.46529273-145.59724446h615.7375348l-26.46529276 145.59724446zM728.75608633 1018.67500848H113.01855153l26.46529273-145.57817728h615.73753479l-26.46529272 145.57817728z\" ></path></symbol><symbol id=\"icon-doc-underline\" viewBox=\"0 0 1024 1024\"><path d=\"M168.27064476 7.61058829h147.0540243V496.98627117c0 28.23772431 1.35742176 56.87764769 4.12254017 85.8694952 2.73160182 29.02536411 10.5912414 55.10126859 23.52864387 78.22771346 12.9374025 23.14320315 32.52784741 42.1638661 58.82160972 57.04523059 26.26024571 14.91488109 63.32959062 22.35556334 111.17451818 22.35556338 47.82816927 0 84.88075591-7.44068225 111.17451821-22.35556338 26.26024571-14.88136451 45.88420723-33.91878576 58.82160972-57.04523059 12.9374025-23.12644485 20.76352547-49.20234932 23.52864389-78.22771346 2.73160182-29.00860582 4.12254018-57.64852917 4.12254016-85.8694952V7.61058829h147.05402429v537.60605118c0 54.11252929-8.22832204 101.16981707-24.70172441 141.1718633-16.47340237 40.00204625-39.81770502 73.51863299-69.99939141 100.5832768-30.19844465 27.0646438-66.4633915 47.25838729-108.81159883 60.58123053-42.34820735 13.32284321-89.40549513 19.99264398-141.17186331 19.992644-51.76636819 0-98.8068977-6.66980075-141.17186332-19.992644-42.34820735-13.32284321-78.62991246-33.53334503-108.81159882-60.58123053-30.19844465-27.0646438-53.525989-60.58123052-69.9993914-100.5832768-16.47340237-40.00204625-24.70172444-87.05933403-24.70172444-141.1718633v-537.60605118zM114.62734768 937.19312131h787.89116263v79.35051908H114.62734768z\" ></path></symbol><symbol id=\"icon-doc-strikethrough\" viewBox=\"0 0 1024 1024\"><path d=\"M89.92338882-7.88869465v161.39800619h337.81144324v341.90493569h186.85273662V153.50931154H953.8826795V-7.88869465zM427.73483206 645.2646721h186.8348611V1039.08009731H427.73483206z\" ></path><path d=\"M90.99591959 540.13878057h863.47665182v60.77674396H90.99591959z\" ></path></symbol><symbol id=\"icon-doc-sub\" viewBox=\"0 0 1024 1024\"><path d=\"M806.9393686 724.65074442c12.04921292 0 23.76326-1.00549761 35.14214118-3.01649283 11.37888118-2.0109952 21.66847332-5.34589559 30.86877639-10.03821772 9.20030306-4.67556385 17.07670094-10.70854945 23.59567707-18.06544024 6.51897611-7.35689079 10.79234093-16.38961091 12.80333613-27.11491868h46.68860533v351.4046536h-62.75980867V769.83110333h-86.33872743v-45.18035891zM61.4466882 1.84879322v151.3106308h316.71498634v320.53587721h175.15768225V153.15942402h318.10592469V1.84879322z\" ></path><path d=\"M378.16167454 452.11061939h175.15768225V983.38203568H378.16167454z\" ></path></symbol><symbol id=\"icon-doc-sup\" viewBox=\"0 0 1024 1024\"><path d=\"M861.44183849 68.94057278c11.29613711 0 22.27805625-0.94265401 32.94575735-2.82796199 10.66770111-1.885308 20.31419374-5.01177712 28.93947788-9.41082913 8.62528412-4.38334111 16.00940713-10.03926511 22.12094724-16.93635023 6.1115401-6.89708512 10.11781962-15.36526023 12.00312763-25.42023625h43.77056747v329.44186275h-58.8373206V111.29715925h-80.94255697v-42.35658647zM33.60309406 69.03483818v141.85371638h296.92029968v300.50238491h164.21032712V210.88855456h298.22430439v-141.85371638z\" ></path><path d=\"M330.52339374 491.15530022h164.21032712v498.0669528H330.52339374z\" ></path></symbol><symbol id=\"icon-doc-link\" viewBox=\"0 0 1024 1024\"><path d=\"M412.64219928 666.88124381l-15.58521283-15.58521284c-125.86002016-125.86002016-125.86002016-330.63589115 0-456.48020042l70.96613546-70.96613544c125.86002016-125.86002016 330.63589115-125.86002016 456.48020039 0 60.95829213 60.97400301 94.54819638 142.02653628 94.54819638 228.24795567 0 86.22141937-33.57419335 167.27395263-94.54819638 228.24795566l-70.96613543 70.96613544-95.08236699-95.08236701 70.96613543-70.96613542c35.56947766-35.56947766 55.16097002-82.85928676 55.16097003-133.16558867s-19.59149234-97.596111-55.16097003-133.16558865c-73.41703584-73.41703584-192.89843058-73.41703584-266.31546642 0l-70.96613544 70.96613543c-73.41703584 73.41703584-73.41703584 192.89843058 0 266.31546642l15.58521283 15.56950194-95.082367 95.09807789z\" ></path><path d=\"M334.27622993 999.44957566c-86.22141937 0-167.27395263-33.57419335-228.24795564-94.54819639-125.86002016-125.86002016-125.86002016-330.63589115 0-456.48020039l70.96613542-70.96613546 95.08236701 95.08236699-70.96613544 70.96613544c-73.41703584 73.41703584-73.41703584 192.89843058 0 266.31546643 35.56947766 35.56947766 82.85928676 55.16097002 133.16558865 55.16097002s97.596111-19.59149234 133.16558867-55.16097002l70.96613543-70.96613544c73.41703584-73.41703584 73.41703584-192.89843058 0-266.31546643l-15.34954933-15.33383842 95.082367-95.08236699 15.34954933 15.34954933c125.86002016 125.84430924 125.86002016 330.63589115 0 456.48020039L562.5241856 904.90137927c-60.97400301 60.97400301-142.02653628 94.54819638-228.24795567 94.54819639z\" ></path></symbol><symbol id=\"icon-doc-unlink\" viewBox=\"0 0 1024 1024\"><path d=\"M770.32638639 727.48091165l136.53754059 136.53754058-30.47239527 30.47377613-136.53892144-136.53892143zM709.72818687 793.58866605l49.97262939 186.5115508-41.6254466 11.15443217-49.97262938-186.51293164zM815.61106119 657.20301796l186.51293166 49.97262939-11.15305132 41.62682744-186.51293165-49.97262937zM270.42472576 288.55718175l-136.53892143-136.53754058 30.47377613-30.47515697 136.53754059 136.54030226zM223.62388774 360.33743025L37.11371777 310.36342003l11.15305132-41.62682745 186.51155083 49.97262938zM329.52609383 223.95178215l-49.97401023-186.51293164 41.62682745-11.15305133 49.97262938 186.51155081z\" ></path><path d=\"M768.50367653 661.1177017l-83.56848664-83.56848662 83.26470163-83.26470163c31.26223623-31.26223623 48.4813213-72.82554501 48.48132131-117.04006815s-17.21908507-85.77783193-48.48132131-117.04006817c-31.26223623-31.26223623-72.82554501-48.4813213-117.04006815-48.4813213s-85.77783193 17.21908507-117.04006816 48.4813213l-83.26470162 83.26470163-83.56848663-83.56848661 83.26470163-83.26470163c110.61915834-110.61915834 290.5979512-110.61915834 401.20330115 0 53.57662394 53.57662394 83.09900073 124.8280104 83.09900072 200.60855478s-29.50856838 147.01812243-83.09900072 200.60855476l-83.25089321 83.26470164z\" ></path><path d=\"M386.81165621 922.80084607c-72.65984411 0-145.2920714-27.64443327-200.60855477-82.96091664-110.61915834-110.61915834-110.61915834-290.5979512 0-401.20330114l83.26470164-83.26470163 83.5684866 83.5684866-83.26470162 83.26470162c-64.52669166 64.52669166-64.52669166 169.53963625 0 234.06632794 64.52669166 64.52669166 169.53963625 64.52669166 234.0663279 0l83.26470163-83.26470165 83.56848661 83.56848663-83.26470163 83.26470163c-55.28886655 55.30267497-127.96251907 82.96091665-200.59474636 82.96091664z\" ></path></symbol><symbol id=\"icon-doc-text-left\" viewBox=\"0 0 1024 1024\"><path d=\"M36.37214018 119.2520475h959.22409175v147.56953821H36.37214018zM36.37214018 441.22730501H640.58389744v147.5695382H36.37214018zM36.37214018 763.20256253h959.22409175v147.5695382H36.37214018z\" ></path></symbol><symbol id=\"icon-doc-text-right\" viewBox=\"0 0 1024 1024\"><path d=\"M40.33423278 119.2520475h959.22409175v147.56953821H40.33423278zM395.34656727 441.22730501h604.21175726v147.5695382H395.34656727zM40.33423278 763.20256253h959.22409175v147.5695382H40.33423278z\" ></path></symbol><symbol id=\"icon-doc-text-center\" viewBox=\"0 0 1024 1024\"><path d=\"M35.91554215 119.79386346h959.22409174v147.56953821H35.91554215zM213.41434491 441.76912096H817.62610217v147.5695382H213.41434491zM35.91554215 763.74437848h959.22409174v147.56953821H35.91554215z\" ></path></symbol><symbol id=\"icon-doc-text-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M34.58993497 436.19894013h959.22409174v147.5695382H34.58993497zM34.58993497 114.2236826h959.22409174v147.5695382H34.58993497zM34.58993497 758.17419764h604.21175725v147.56953818H34.58993497z\" ></path></symbol><symbol id=\"icon-doc-h1\" viewBox=\"0 0 1024 1024\"><path d=\"M838.95954054 685.22838374c12.09739302 0 23.86485715-1.00549761 35.30239238-3.0322037 11.42182433-2.0109952 21.75959654-5.37312782 31.01331667-10.08639783 9.23800921-4.6975591 17.14059193-10.76196654 23.70774814-18.14608953 6.55144531-7.38412301 10.84052103-16.46502324 12.85151622-27.22698976h46.8970366V979.71349394h-63.03213091V730.61717394h-86.7398791v-45.3887902zM38.33207498 434.16820125h644.49254106v157.40750742H38.33207498z\" ></path><path d=\"M606.4067983 979.73863136v-933.73021065h157.40750739v933.73021065zM38.34307259 979.73548918v-933.73021063h157.40750742v933.73021063z\" ></path></symbol><symbol id=\"icon-doc-h2\" viewBox=\"0 0 1024 1024\"><path d=\"M1001.67929603 950.48140057H775.72218599c0.30930834-27.42533986 6.92261532-51.35991413 19.85464991-71.86263869 12.91730562-20.48799557 30.56261022-38.29531883 52.95064277-53.42196975 10.70796031-7.87999829 21.90197658-15.5243331 33.56731984-22.93300441 11.6506143-7.40867129 22.37330358-15.36231443 32.15333884-23.87565838 9.76530631-8.51334395 17.80732325-17.73367842 24.1113219-27.66100337 6.30399865-9.92732496 9.60328765-21.34227575 9.92732495-34.27431034 0-5.97996133-0.7069905-12.37233377-2.12097151-19.14765942s-4.18302714-13.07932428-8.27768043-18.91199592c-4.09465331-5.83267163-9.76530631-10.70796031-17.01195896-14.65532392-7.24665264-3.93263466-16.70265059-5.90631648-28.36799385-5.90631649-10.72268926 0-19.61898642 2.1209715-26.70362041 6.37764348s-12.77001594 10.08934363-17.01195894 17.49801491c-4.25667198 7.40867129-7.40867129 16.15767874-9.45599796 26.2322934-2.04732666 10.08934363-3.24037312 20.95932258-3.54968147 32.62466583h-53.89329676c0-18.27865025 2.44500882-35.21696436 7.33502645-50.81494228 4.87528868-15.59797794 12.21031511-29.07498437 21.97562143-40.41629031 9.76530631-11.34130596 21.66631307-20.25233207 35.68829135-26.70362041 14.02197828-6.45128833 30.32694672-9.69166146 48.92963427-9.69166146 20.16395826 0 37.02862751 3.31401797 50.5792788 9.92732496 13.55065127 6.61330698 24.49427509 14.97936125 32.86032934 25.05397589 8.3513253 10.08934363 14.25764178 21.03296741 17.73367842 32.86032934 3.46130767 11.81263296 5.19932598 23.09502305 5.19932596 33.80298335 0 13.24134293-2.04732666 25.21599454-6.14197997 35.92395484a115.85806843 115.85806843 0 0 1-16.54063193 29.5463114c-6.93734429 8.98467097-14.8173426 17.24762245-23.6399949 24.81831238-8.8226523 7.57068995-17.96934191 14.65532395-27.42533988 21.26863092-9.45599795 6.61330698-18.91199591 12.93203459-28.36799385 18.91199591-9.45599795 5.99469028-18.20500541 11.97465162-26.23229341 17.96934192-8.04201696 5.99469028-15.0530061 12.21031511-21.0329674 18.6763324-5.99469028 6.4660173-10.08934363 13.31498777-12.28395997 20.56164043H1001.7382119v48.22264379zM31.747244 439.03268867h604.21175725v147.56953821H31.747244z\" ></path><path d=\"M564.30698682 950.51085849V75.13878601h147.5695382v875.37207248zM31.747244 950.50643981v-875.37207248h147.56953819v875.37207248z\" ></path></symbol><symbol id=\"icon-doc--h3\" viewBox=\"0 0 1024 1024\"><path d=\"M866.61465232 756.66290039c8.8226523 0.30930834 17.64530461-0.30930834 26.46795691-1.88530801 8.8226523-1.57599966 16.70265059-4.33031682 23.63999488-8.27768045 6.92261532-3.93263466 12.51962347-9.36762415 16.77629544-16.30496844 4.25667198-6.92261532 6.37764349-15.43595929 6.37764348-25.52530289 0-14.18399693-4.80164382-25.5253029-14.41966044-34.03864685-9.61801661-8.51334395-21.97562143-12.77001594-37.11700131-12.77001594-9.45599795 0-17.66003356 1.885308-24.58264889 5.670653-6.93734429 3.78534498-12.69637108 8.9110261-17.24762245 15.36231442-4.56598032 6.4660173-7.96837211 13.71266993-10.16298845 21.73995793-2.20934532 8.04201696-3.15199932 16.30496844-2.84269098 24.81831237H779.62536272c0.63334567-16.06930493 3.62332633-30.96029237 8.98467095-44.6729623 5.36134464-13.71266993 12.68164212-25.59894774 21.97562142-35.68829134 9.29397931-10.08934363 20.56164042-17.96934191 33.80298334-23.63999488 13.24134293-5.67065298 28.20597521-8.51334395 44.90862582-8.51334397 12.91730562 0 25.59894774 1.885308 38.05965532 5.67065298 12.44597861 3.78534498 23.63999488 9.29397931 33.56731985 16.54063195 9.92732496 7.24665264 17.88096809 16.46698708 23.87565838 27.66100336 5.97996133 11.19401627 8.98467097 24.03767705 8.98467097 38.53098233 0 16.70265059-3.78534498 31.28432969-11.34130596 43.7303083-7.57068995 12.46070759-19.38332291 21.50429441-35.45262786 27.18967637v0.942654c18.91199591 3.78534498 33.6409647 13.16769809 44.20163531 28.13233038 10.56067061 14.97936125 15.83364144 33.16963769 15.83364143 54.60028726 0 15.75999659-3.15199932 29.87034868-9.45599795 42.3163273-6.30399865 12.46070759-14.8173426 23.00664924-25.52530289 31.66728287-10.72268926 8.67536261-23.16866789 15.36231443-37.35266483 20.09031341-14.18399693 4.72799898-29.14862921 7.08463398-44.90862581 7.08463399-19.22130427 0-36.01232867-2.76904613-50.34361527-8.27768047-14.34601558-5.50863433-26.3206672-13.31498777-35.92395486-23.40433137-9.61801661-10.08934363-16.9383141-22.21128493-21.97562143-36.39528185-5.05203629-14.18399693-7.7327086-29.94399353-8.04201694-47.2799898h53.89329676c-0.63334567 20.17868721 4.33031682 36.95498268 14.89098744 50.34361529 10.56067061 13.40336159 26.39431205 20.09031342 47.51565327 20.09031343 17.96934191 0 33.00761904-5.12568113 45.14428932-15.36231446 12.1219413-10.23663329 18.20500541-24.81831238 18.2050054-43.73030829 0-12.91730562-2.53338263-23.16866789-7.57068994-30.72462889-5.03730733-7.57068995-11.66534327-13.31498777-19.85464993-17.24762242-8.20403561-3.93263466-17.42437006-6.37764349-27.66100336-7.33502644-10.25136227-0.94265401-20.72365907-1.25196235-31.43161938-0.94265401v-40.16589787zM33.30851468 439.03268867h604.21175725v147.56953821H33.30851468z\" ></path><path d=\"M565.86383883 950.50643981v-875.37207248h147.5695382v875.37207248zM33.30556889 950.50349401v-875.37207248h147.56953819v875.37207248z\" ></path></symbol><symbol id=\"icon-doc-h4\" viewBox=\"0 0 1024 1024\"><path d=\"M1001.59092222 872.0054549h-42.5519908v78.47594567h-51.05060581v-78.47594567h-141.82524035v-53.42196976l141.82524035-199.01782615h51.05060581v209.90253408h42.5519908v42.53726183z m-193.83322913-42.53726183h100.21590357v-145.61058536h-0.94265399l-99.27324958 145.61058536zM29.30223517 439.03268867H633.51399243v147.56953821H29.30223517z\" ></path><path d=\"M561.8649238 950.49907532v-875.37207248h147.56953819v875.37207248zM29.30665387 950.49612951V75.12405703h147.56953818v875.37207248z\" ></path></symbol><symbol id=\"icon-doc-h5\" viewBox=\"0 0 1024 1024\"><path d=\"M808.44995461 618.25215013h171.13588825v48.22264379h-130.95526142L831.61862251 750.62139254l0.942654 0.94265401c7.24665264-8.18930666 16.46698708-14.41966045 27.66100336-18.67633241 11.17928731-4.25667198 22.29965873-6.37764349 33.33165634-6.37764348 16.37861328 0 31.03393723 2.76904613 43.96597182 8.27768044 12.91730562 5.5233633 23.78728459 13.24134293 32.62466586 23.16866789 8.8226523 9.92732496 15.5243331 21.66631307 20.09031341 35.21696436 4.56598032 13.55065127 6.84897049 28.20597521 6.84897047 43.96597181 0 13.24134293-2.1209715 26.86563906-6.37764349 40.88761733-4.25667198 14.02197828-11.03199761 26.79199422-20.32597691 38.29531882-9.29397931 11.50332462-21.19498608 20.95932258-35.68829135 28.36799387-14.49330528 7.39394234-31.82930154 11.10564246-52.00798875 11.10564246-16.06930493 0-30.96029237-2.1209715-44.67296232-6.37764347s-25.76096639-10.63431545-36.15961834-19.14765942c-10.39865195-8.51334395-18.67633241-18.98564075-24.8183124-31.43161939-6.14197998-12.44597861-9.52964279-27.01292874-10.16298846-43.73030829h53.89329676c1.57599966 17.96934191 7.71797963 31.75565669 18.44066891 41.35894433 10.70796031 9.61801661 24.89195725 14.41966045 42.5519908 14.41966042 11.34130596 0 20.95932258-1.885308 28.83932088-5.67065297 7.87999829-3.78534498 14.25764178-8.98467097 19.14765941-15.59797794 4.89001763-6.61330698 8.3513253-14.33128663 10.39865197-23.16866788 2.04732666-8.8226523 3.07835446-18.27865025 3.07835447-28.36799388 0-9.13196064-1.26669131-17.88096809-3.78534498-26.23229339-2.53338263-8.3513253-6.30399865-15.67162277-11.34130596-21.97562142-5.05203629-6.30399865-11.57696946-11.34130596-19.61898641-15.12665094s-17.42437006-5.67065298-28.13233037-5.67065297c-11.34130596 0-21.97562143 2.1209715-31.91767536 6.37764347s-17.10033275 12.21031511-21.50429441 23.87565839H772.99732677l35.45262784-181.07794216zM24.76571278 437.7191798h604.21175727v147.5695382H24.76571278z\" ></path><path d=\"M557.32840142 949.18703936v-875.3720725h147.56953821v875.3720725zM24.77013148 949.18262067V73.81054818h147.56953819v875.37207249z\" ></path></symbol><symbol id=\"icon-doc-h6\" viewBox=\"0 0 1024 1024\"><path d=\"M940.49515971 699.86536614c-1.26669131-13.55065127-6.06833515-24.49427509-14.41966041-32.86032935-8.3513253-8.3513253-19.61898642-12.53435243-33.80298335-12.53435244-9.78003527 0-18.20500541 1.81166317-25.28963942 5.43498949-7.08463398 3.62332633-13.07932428 8.43969911-17.96934191 14.41966043-4.89001763 5.99469028-8.8226523 12.84366078-11.81263296 20.56164042-3.00470964 7.7327086-5.43498947 15.83364144-7.32029747 24.34698539s-3.24037312 16.9383141-4.02100847 25.28963939c-0.79536432 8.3513253-1.50235481 16.15767874-2.12097152 23.40433139l0.94265403 0.942654c7.24665264-13.24134293 17.24762245-23.08029408 30.01763835-29.54631136 12.77001594-6.45128833 26.54160174-9.69166146 41.35894433-9.69166147 16.37861328 0 31.03393723 2.84269097 43.96597182 8.51334397 12.91730562 5.67065298 23.8756584 13.47700643 32.86032934 23.40433137 8.98467097 9.92732496 15.83364144 21.66631307 20.5616404 35.21696436 4.72799898 13.55065127 7.08463398 28.20597521 7.08463399 43.96597182 0 16.06930493-2.60702749 30.96029237-7.80635344 44.67296229-5.19932598 13.71266993-12.69637108 25.68732157-22.46167739 35.92395486-9.76530631 10.25136227-21.43064957 18.20500541-34.98130085 23.87565839-13.55065127 5.67065298-28.53001251 8.51334395-44.90862581 8.51334395-24.27334055 0-44.20163531-4.49233548-59.79961325-13.47700643s-27.89666686-21.26863091-36.88133782-36.88133783c-8.98467097-15.59797794-15.21502476-33.87662819-18.6763324-54.83595077-3.47603662-20.95932258-5.19932598-43.56828965-5.199326-67.84163019 0-19.85464991 2.1209715-39.8713185 6.37764349-60.03527672 4.25667198-20.16395826 11.26766112-38.53098233 21.03296743-55.07161428 9.76530631-16.54063195 22.60896707-30.01763837 38.53098231-40.41629033 15.90728628-10.39865195 35.52627269-15.59797794 58.85695925-15.59797793 13.24134293 0 25.68732157 2.20934532 37.35266483 6.61330696 11.6506143 4.41869063 21.97562143 10.56067061 30.96029236 18.44066893s16.30496844 17.33599627 21.97562142 28.36799387c5.67065298 11.03199761 8.8226523 23.33068654 9.45599796 36.88133782h-53.86383884z m-51.99325978 208.95988006c9.76530631 0 18.27865025-1.95895284 25.52530291-5.90631647 7.24665264-3.93263466 13.31498777-9.0583158 18.20500539-15.36231445 4.87528868-6.30399865 8.51334395-13.62429613 10.86997897-21.99035038 2.35663501-8.3513253 3.54968148-16.9383141 3.54968147-25.76096639 0-8.8226523-1.17831749-17.3212673-3.54968147-25.52530289-2.35663501-8.18930666-5.99469028-15.36231443-10.86997897-21.50429444-4.89001763-6.14197998-10.95835278-11.10564246-18.20500539-14.89098742-7.24665264-3.78534498-15.75999659-5.67065298-25.52530291-5.67065298-9.76530631 0-18.36702407 1.81166317-25.7609664 5.43498948-7.40867129 3.62332633-13.63902509 8.51334395-18.67633241 14.65532393-5.05203629 6.14197998-8.8226523 13.31498777-11.34130595 21.50429443-2.51865366 8.20403561-3.78534498 16.86466924-3.78534498 25.99662989 0 9.14668961 1.25196235 17.80732325 3.78534498 25.99662989 2.51865366 8.20403561 6.30399865 15.5243331 11.34130595 21.97562142 5.03730733 6.4660173 11.26766112 11.57696946 18.67633241 15.36231444 7.39394234 3.78534498 15.98093113 5.68538195 25.7609664 5.68538194zM28.24174943 435.65712417h604.21175725v147.56953821H28.24174943z\" ></path><path d=\"M560.80001936 947.12351082v-875.37207248h147.5695382v875.37207248zM28.24174943 947.13529399V71.76322151h147.56953818v875.37207248z\" ></path></symbol><symbol id=\"icon-doc-list-bullet\" viewBox=\"0 0 1024 1024\"><path d=\"M307.74992046 66.0136108h687.45871047V233.91495203H307.74992046zM307.74992046 432.34990377h687.45871047V600.25124502H307.74992046zM307.74992046 798.68619676h687.45871047V966.58753801H307.74992046z\" ></path><path d=\"M119.55428593 150.82733352m-83.94229147 0a83.94229148 83.94229148 0 1 0 167.88458296 0 83.94229148 83.94229148 0 1 0-167.88458296 0Z\" ></path><path d=\"M119.55428593 516.30895353m-83.94229147 0a83.94229148 83.94229148 0 1 0 167.88458296 0 83.94229148 83.94229148 0 1 0-167.88458296 0Z\" ></path><path d=\"M119.55428593 873.64604298m-83.94229147 0a83.94229148 83.94229148 0 1 0 167.88458296 0 83.94229148 83.94229148 0 1 0-167.88458296 0Z\" ></path></symbol><symbol id=\"icon-doc-list-number\" viewBox=\"0 0 1024 1024\"><path d=\"M77.65645774 66.82007455c8.95521301 0 17.67476253-0.7541232 26.14293764-2.24665871 8.46817511-1.4925355 16.11938343-3.97485772 22.96933587-7.46267752 6.84995241-3.48781981 12.69440723-7.96542631 17.54907533-13.44853043 4.8546681-5.46739321 8.02826992-12.19165842 9.52080541-20.17279564h34.73679997v261.41366563h-46.67708399V100.42568972h-64.22615933V66.82007455zM250.94768509 646.61512929H72.44043893c0.25137441-21.66533114 5.46739321-40.58125477 15.67947822-56.76348181 10.21208501-16.18222702 24.14765335-30.24348257 41.8224159-42.1994775 8.46817511-6.22151641 17.29770093-12.25450203 26.51999925-18.11466772 9.20658741-5.84445481 17.67476253-12.12881484 25.38881445-18.85308005s14.06125553-13.99841193 19.04161085-21.83815104 7.5883647-16.85779573 7.8397391-27.06988074c0-4.7289809-0.56559241-9.77217982-1.6810663-15.12959673-1.1154739-5.35741691-3.29928901-10.32206132-6.53573442-14.94106594-3.2364454-4.60329372-7.71405191-8.46817511-13.44853042-11.57893332-5.73447851-3.11075821-13.19715602-4.66613731-22.40374345-4.6661373-8.46817511 0-15.49094743 1.6810663-21.09973875 5.0431989-5.59308042 3.36213261-10.08639781 7.96542631-13.44853043 13.82559203-3.36213261 5.84445481-5.86016571 12.75725083-7.46267751 20.72267714-1.61822271 7.96542631-2.56087671 16.55928864-2.7965402 25.76587604h-42.57653907c0-14.43831713 1.93244071-27.82400397 5.78161121-40.14134957s9.64649262-22.96933584 17.36054452-31.92454886c7.71405191-8.97092391 17.10917014-15.99369623 28.20106557-21.09973875 11.07618453-5.10604252 23.95912255-7.65120833 38.64881407-7.65120832 15.93085264 0 29.25369585 2.60800941 39.95281878 7.83973913 10.69912292 5.23172972 19.35582883 11.83030771 25.95440685 19.79573405 6.59857803 7.96542631 11.26471532 16.62213222 13.99841193 25.95440682 2.73369661 9.33227462 4.10054491 18.24035493 4.1005449 26.69281916 0 10.46345942-1.61822271 19.92142124-4.85466811 28.38959638a91.77050925 91.77050925 0 0 1-13.07146881 23.34639742 132.40832327 132.40832327 0 0 1-18.66454924 19.60720325c-6.97563961 5.97014202-14.18694273 11.57893331-21.66533115 16.81066302-7.46267753 5.23172972-14.94106593 10.21208501-22.40374343 14.94106594s-14.37547353 9.45796181-20.72267715 14.18694273c-6.34720361 4.7289809-11.89315133 9.64649262-16.62213224 14.75253514-4.7289809 5.10604252-7.96542631 10.52630302-9.70933622 16.24507062h127.33684475v38.05179988zM143.01380187 841.06893898c6.95992869 0.25137441 13.93556833-0.25137441 20.91120793-1.49253551 6.97563961-1.24116111 13.19715602-3.4249762 18.68026014-6.53573442 5.46739321-3.11075821 9.89786702-7.39983391 13.25999963-12.88293801 3.36213261-5.46739321 5.04319891-12.19165842 5.0431989-20.17279564 0-11.20187171-3.80203779-20.17279564-11.39040251-26.88134995-7.60407563-6.72426523-17.36054453-10.08639781-29.31653946-10.08639783-7.46267753 0-13.95127923 1.4925355-19.41867243 4.4776065-5.48310411 2.98507101-10.02355422 7.03848323-13.63706124 12.12881484-3.61350702 5.10604252-6.28436002 10.82481012-8.02826991 17.17201373-1.7439099 6.34720361-2.49803311 12.88293803-2.24665871 19.60720324h-42.57653908c0.50274881-12.69440723 2.8593838-24.46187135 7.10132682-35.28668148 4.22623211-10.82481012 10.02355422-20.21992834 17.36054453-28.20106554 7.33699033-7.96542631 16.24507063-14.18694273 26.69281915-18.66454925 10.46345942-4.47760652 22.27805625-6.72426523 35.47521228-6.72426522 10.21208501 0 20.21992834 1.4925355 30.05495176 4.47760652 9.83502341 2.98507101 18.66454924 7.35270122 26.51999923 13.07146882 7.8397391 5.73447851 14.12409913 13.00862523 18.85308005 21.83815105 4.7289809 8.84523671 7.10132681 18.99447813 7.10132682 30.43201337 0 13.19715602-2.98507101 24.71324575-8.97092392 34.54826916-5.97014202 9.83502341-15.31812754 16.99919383-28.01253477 21.47680033v0.75412321c14.94106593 2.98507101 26.56713195 10.40061582 34.92533079 22.21521264 8.34248791 11.83030771 12.50587643 26.20578126 12.50587643 43.12642058 0 12.45874373-2.49803311 23.59777183-7.46267752 33.41708438-4.9803553 9.83502341-11.70462053 18.17751135-20.17279566 25.02746375-8.46817511 6.84995241-18.30319853 12.14452571-29.50507024 15.86800904s-23.03217943 5.60879132-35.47521228 5.60879131c-15.19244033 0-28.45243996-2.1838151-39.76428799-6.53573443-11.32755893-4.35191932-20.78552075-10.51059212-28.38959634-18.49172933-7.60407563-7.96542631-13.38568684-17.54907534-17.36054454-28.75094707-3.9905686-11.20187171-6.09582922-23.64490454-6.34720361-37.34480937h42.57653909c-0.50274881 15.93085264 3.4249762 29.19085227 11.76746411 39.76428799 8.34248791 10.58914662 20.84836434 15.86800901 37.53334019 15.86800903 14.18694273 0 26.08009405-4.03770131 35.66374308-12.14452571 9.58364903-8.09111351 14.37547353-19.60720323 14.37547352-34.54826918 0-10.21208501-1.99528431-18.30319853-5.97014201-24.27334054-3.9905686-5.97014202-9.20658741-10.51059212-15.67947824-13.63706124-6.47289083-3.11075821-13.76274842-5.04319891-21.85386195-5.78161121-8.09111351-0.7541232-16.37075785-0.9897867-24.83893294-0.75412319v-31.68888537zM325.90438913 74.81692265h644.49254107v157.40750743H325.90438913zM325.90438913 451.87852341h644.49254107v157.40750741H325.90438913zM325.90438913 795.31879808h644.49254107v157.40750742H325.90438913z\" ></path></symbol></svg>',(a=>{var h=(t=(t=document.getElementsByTagName(\"script\"))[t.length-1]).getAttribute(\"data-injectcss\"),t=t.getAttribute(\"data-disable-injectsvg\");if(!t){var o,c,e,v,i,d=function(h,t){t.parentNode.insertBefore(h,t)};if(h&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(h){console&&console.log(h)}}o=function(){var h,t=document.createElement(\"div\");t.innerHTML=a._iconfont_svg_string_1032790,(t=t.getElementsByTagName(\"svg\")[0])&&(t.setAttribute(\"aria-hidden\",\"true\"),t.style.position=\"absolute\",t.style.width=0,t.style.height=0,t.style.overflow=\"hidden\",t=t,(h=document.body).firstChild?d(t,h.firstChild):h.appendChild(t))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(o,0):(c=function(){document.removeEventListener(\"DOMContentLoaded\",c,!1),o()},document.addEventListener(\"DOMContentLoaded\",c,!1)):document.attachEvent&&(e=o,v=a.document,i=!1,s(),v.onreadystatechange=function(){\"complete\"==v.readyState&&(v.onreadystatechange=null,l())})}function l(){i||(i=!0,e())}function s(){try{v.documentElement.doScroll(\"left\")}catch(h){return void setTimeout(s,50)}l()}})(window);","export const DATA_MODEL_NAME = \"DATA_MODEL_NAME\";\n","export const IP_PATTERN =\n /^(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\.(1\\d\\d|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$/;\n\nexport const EMAIL_PATTERN = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$/;\n","/**\n * 菜单类型\n */\nexport enum MenuType {\n Container = \"1\",\n Menu = \"2\",\n SystemSettings = \"3\",\n}\n\n/**\n * 菜单链接类型\n */\nexport enum MenuUrlType {\n Inner = \"1\",\n Outer = \"2\",\n}\n","export enum RegionLevel {\n Province = 1,\n City = 2,\n District = 3,\n Town = 4,\n}\n","export enum LoginLogType {\n SUCCESS = 1,\n FAILURE = 2,\n LOCK = 3,\n}\n","import { InjectionKey } from \"vue\";\nimport { MSAppClient } from \"../core\";\n\nexport interface MSAppClientContext {\n msAppClient: MSAppClient;\n}\n\nexport const MSAPPCLIENT_CONTEXT_KEY: InjectionKey<MSAppClientContext> = Symbol(\n \"msAppClientContextKey\"\n);\n","export * from \"./data-model\";\nexport * from \"./pattern\";\nexport * from \"./menu\";\nexport * from \"./region\";\nexport * from \"./log\";\nexport * from \"./ms-app-client\";\n\n\nexport const MODULE_NAME = \"ms\";\n","import { defineAsyncComponent } from \"vue\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class DataTableComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKColumnAction\",\n title: \"操作\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-action\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnText\",\n title: \"文本\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-text\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnObjectMappingText\",\n title: \"对象映射文本\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-object-mapping-text\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnImage\",\n title: \"图片\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-image\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSelect\",\n title: \"行选择\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-select\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnJson\",\n title: \"JSON\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-json\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnDate\",\n title: \"日期时间\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-date\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSwitch\",\n title: \"开关\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-switch\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnTag\",\n title: \"标签\",\n component: defineAsyncComponent(\n async () =>\n import(\"../../components/data-model/data-table/components/column-tag\")\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnLink\",\n title: \"链接\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-link\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnSort\",\n title: \"拖拽排序\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-sort\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKColumnIcon\",\n title: \"图标\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/column-icon\"\n )\n ),\n });\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class DataTableHeaderComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKButton\",\n title: \"按钮\",\n component: defineAsyncComponent(\n async () => import(\"../../components/basic/Button\")\n ),\n });\n\n this.registerComponent({\n name: \"MKClassifySearch\",\n title: \"分类筛选\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/views/table-view/classify-search\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKBatchOpt\",\n title: \"批量操作\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/header-components/batch-opt\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKTableFilter\",\n title: \"筛选\",\n component: defineAsyncComponent(\n async () =>\n import(\n \"../../components/data-model/data-table/components/header-components/table-filter\"\n )\n ),\n });\n }\n}\n","import {defineAsyncComponent} from \"vue\";\nimport {ElInput, ElInputNumber} from \"element-plus\";\nimport {Components} from \"@maketribe/dm\";\n\nexport class DataFormComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKFormInput\",\n title: \"输入框\",\n component: ElInput,\n });\n\n this.registerComponent({\n name: \"MKFormInputNumber\",\n title: \"数值输入框\",\n component: ElInputNumber,\n });\n\n this.registerComponent({\n name: \"MKFormDatePicker\",\n title: \"时间选择组件\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/DatePicker\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormDataSelect\",\n title: \"数据源下拉框\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/DataSelect\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormIconSelect\",\n title: \"图标选择\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/IconSelect\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormRadioBox\",\n title: \"单选框\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/Radio\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormImageUpload\",\n title: \"图片上传\",\n component: defineAsyncComponent(\n async () =>\n (await import(\"../../components/business/Upload/UploadImage.vue\"))\n ),\n });\n\n this.registerComponent({\n name: \"MKFormFileUpload\",\n title: \"文件上传\",\n component: defineAsyncComponent(\n async () =>\n (await import(\"../../components/business/Upload/UploadFile.vue\"))\n ),\n });\n\n\n this.registerComponent({\n name: \"MKFormVideoUpload\",\n title: \"视频选择\",\n component: defineAsyncComponent(\n async () =>\n (await import(\"../../components/business/Upload/UploadVideo.vue\"))\n ),\n });\n\n this.registerComponent({\n name: \"MKFormDataTableSelect\",\n title: \"数据表选择\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/DataTableSelect\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormDetail\",\n title: \"明细\",\n component: defineAsyncComponent(\n () =>\n import(\"../../components/data-model/data-form/components/form-detail\")\n ),\n });\n\n this.registerComponent({\n name: \"MKCodeEditor\",\n title: \"代码编辑器\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/CodeEditor\")\n ),\n });\n\n this.registerComponent({\n name: \"MKJsonEditor\",\n title: \"JSON编辑器\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/JsonEditor\")\n ),\n });\n\n this.registerComponent({\n name: \"MKDataTreeSelect\",\n title: \"树选择器\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/DataTreeSelect\")\n ),\n });\n\n this.registerComponent({\n name: \"MKResourceSelectInput\",\n title: \"资源选择输入框\",\n component: defineAsyncComponent(\n () => import(\"../../components/business/ResourceSelect/ResourceSelectInput.tsx\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFormRichTextEditor\",\n title: \"富文本\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/RichTextEditor\")\n ),\n });\n\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { Component, Components, Operator } from \"@maketribe/dm\";\n\nexport type DataFilterComponent = Component & {\n defaultOperator: Operator;\n};\n\nexport class DataFilterComponents extends Components<DataFilterComponent> {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKConditionInput\",\n title: \"输入框\",\n defaultOperator: Operator.CONTAIN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-input\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionNumber\",\n title: \"数值\",\n defaultOperator: Operator.EQUAL,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-number\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionSelect\",\n title: \"下拉框\",\n defaultOperator: Operator.IN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-select\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionTreeSelect\",\n title: \"树形下拉框\",\n defaultOperator: Operator.IN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/basic/DataTreeSelect\"\n )\n ),\n });\n\n this.registerComponent({\n name: \"MKConditionDate\",\n title: \"日期\",\n defaultOperator: Operator.BETWEEN,\n component: defineAsyncComponent(\n () =>\n import(\n \"../../components/data-model/data-filter-form/components/condition-date\"\n )\n ),\n });\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { ElInput, ElInputNumber } from \"element-plus\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class ConfigComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKConfigInput\",\n title: \"输入框\",\n component: ElInput,\n defaultProps: {\n type: \"textarea\",\n },\n });\n\n this.registerComponent({\n name: \"MKConfigInputNumber\",\n title: \"数值输入框\",\n component: ElInputNumber,\n });\n\n this.registerComponent({\n name: \"MKConfigJsonEditor\",\n title: \"JSON\",\n component: defineAsyncComponent(\n () => import(\"../../components/basic/JsonEditor\")\n ),\n });\n }\n}\n","import { PermissionPoint } from \"../PermissionPointManager\";\nimport type { Route } from \"../Router\";\n\ninterface MenuNodeOptions {\n id: string;\n route?: Route | null;\n routes: Route[] | null;\n iconName: string;\n title: string;\n urlType: number;\n path?: string;\n permissionPoints: PermissionPoint[];\n children: MenuNode[];\n type: string;\n parent?: MenuNode | null;\n}\n\nexport class MenuNode {\n id: string;\n iconName: string;\n title: string;\n permissionPoints: PermissionPoint[];\n route: Route | null;\n routes: Route[] | null;\n type: string;\n path?: string;\n urlType: number;\n children: MenuNode[];\n parent: MenuNode | null;\n\n constructor(options: MenuNodeOptions) {\n const { id, children, route, routes,iconName, title,path, permissionPoints, urlType,type } = options;\n this.id = id;\n this.route = route ?? null;\n this.routes = routes;\n this.iconName = iconName;\n this.type = type;\n this.title = title;\n this.path = path;\n this.urlType = urlType;\n this.children = children;\n this.parent = options.parent ?? null;\n this.permissionPoints = permissionPoints;\n }\n\n getMenuNodePath(): MenuNode[] {\n const path: MenuNode[] = [];\n\n let menuNode: MenuNode | null = this;\n\n while (menuNode) {\n path.unshift(menuNode);\n\n menuNode = menuNode.parent;\n }\n\n return path;\n }\n}\n","import { Disposable, Event } from \"@maketribe/utils\";\nimport { PermissionPointManager } from \"../PermissionPointManager\";\nimport { Router } from \"../Router\";\nimport { MenuNode } from \"./MenuNode\";\nimport type { Route } from \"../Router\";\n\nexport type PermissionPointDefine = {\n id: string;\n menuId: string;\n key: string;\n name: string;\n};\n\nexport type MenuData = {\n id: string;\n title: string | null;\n iconName: string | null;\n pid: string | null;\n routeId: string;\n sort: string;\n type: number;\n urlType: number;\n url?: string;\n routes: Route[];\n permissionPoints: PermissionPointDefine[];\n};\n\nexport class Menu extends Disposable {\n rootMenus: MenuNode[] = [];\n\n _currentMenu: MenuNode | null = null;\n\n isCollapsed: boolean = false;\n\n isVisible: boolean = true;\n\n permissionPointManager: PermissionPointManager;\n\n router: Router;\n\n currentMenuChangeEvent: Event<{ currentMenu: MenuNode | null }> =\n this.register(new Event());\n\n constructor(permissionPointManager: PermissionPointManager, router: Router) {\n super();\n this.permissionPointManager = permissionPointManager;\n this.router = router;\n }\n\n setMenus(menus: MenuData[]) {\n const menuNodes = menus\n .sort((menu1, menu2) => {\n const sort1 = parseInt(menu1.sort) || 0;\n const sort2 = parseInt(menu2.sort) || 0;\n\n return sort2 - sort1;\n })\n .map((menuInfo) => {\n const route = this.router.getRouteByID(menuInfo.routeId);\n const routes = this.router.getRoutesByMenuID(menuInfo.id);\n const permissionPoints = this.permissionPointManager.getPermissionPointsByMenuID(menuInfo.id);\n\n return new MenuNode({\n id: menuInfo.id,\n route,\n routes,\n urlType:menuInfo.urlType,\n type: menuInfo.type.toString(),\n iconName: menuInfo.iconName || \"\",\n title: menuInfo.title || \"\",\n path:menuInfo.url,\n permissionPoints,\n children: [],\n });\n });\n\n const rootMenuNodes: MenuNode[] = [];\n\n for (let i = 0, len = menuNodes.length; i < len; i++) {\n const menuNodeInfo = menus[i];\n const menuNode = menuNodes[i];\n\n menuNode.iconName = menuNode.iconName || \"default-menu\";\n\n if (!menuNodeInfo.pid) {\n rootMenuNodes.push(menuNode);\n }\n\n for (const route of this.router.getRoutesByMenuID(menuNode.id)) {\n route.iconName = route.iconName || menuNode.iconName;\n }\n\n for (let j = 0; j < len; j++) {\n const menuNodeInfoInner = menus[j];\n const menuNodeInner = menuNodes[j];\n\n if (menuNodeInfoInner.pid === menuNodeInfo.id) {\n menuNode.children.push(menuNodeInner);\n menuNodeInner.parent = menuNode;\n }\n }\n }\n\n this.rootMenus = rootMenuNodes;\n }\n\n findMenuNodeByID(id: MenuNode[\"id\"]): MenuNode | null {\n if (!id) {\n return null;\n }\n\n let list = this.rootMenus.slice();\n\n for (let i = 0; i < list.length; i++) {\n const node = list[i];\n\n if (node.id === id) {\n return node;\n }\n\n list = list.concat(node.children);\n }\n\n return null;\n }\n\n async setCurrentMenuNode(node: MenuNode | null) {\n this._currentMenu = node;\n\n this.currentMenuChangeEvent.emit({ currentMenu: node });\n\n return true;\n }\n\n getCurrentMenuNode() {\n return this._currentMenu;\n }\n\n getFirstLeafMenuNode(menus: MenuNode[] = this.rootMenus) {\n function _getFirstLeafMenuNode(menus: MenuNode[]): MenuNode | null {\n if (!menus.length) {\n return null;\n }\n\n return _getFirstLeafMenuNode(menus[0].children) || menus[0];\n }\n\n return _getFirstLeafMenuNode(menus);\n }\n\n getMenuNodeByID(id: string): MenuNode | null {\n let nodes = this.rootMenus.slice();\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node.id === id) {\n return node;\n }\n\n nodes = nodes.concat(node.children);\n }\n\n return null;\n }\n}\n","import { Disposable, Event } from \"@maketribe/utils\";\nimport type { Route } from \"../Router\";\nimport type { Tabs } from \"./Tabs\";\n\nexport interface TabOptions {\n id: string;\n\n title: string;\n\n affix?: boolean;\n\n realRoute: any;\n\n route: Route;\n\n tabs: Tabs;\n}\n\nexport class Tab extends Disposable {\n id: string;\n\n title: string;\n\n affix: boolean;\n\n realRoute: any;\n\n route: Route;\n\n beforeCloseEvent: Event = this.register(new Event());\n\n refreshEvent: Event = this.register(new Event());\n\n beforeSwitchEvent: Event = this.register(new Event());\n\n tabs: Tabs;\n\n constructor(options: TabOptions) {\n super();\n this.id = options.id;\n this.title = options.title;\n this.affix = options.affix ?? false;\n this.realRoute = options.realRoute;\n this.route = options.route;\n this.tabs = options.tabs;\n }\n\n getTitle() {\n return this.title;\n }\n\n getID() {\n return this.id;\n }\n\n close() {\n this.tabs.closeTab(this);\n }\n}\n","import { Disposable, Event } from \"@maketribe/utils\";\nimport { Tab, TabOptions } from \"./Tab\";\nimport type { UserSession } from \"../UserSession\";\n\nexport class Tabs extends Disposable {\n userSession: UserSession;\n\n _tabs: Tab[] = [];\n _currentTab: Tab | null = null;\n\n currentTabChangeEvent: Event<{ currentTab: Tab | null }> = this.register(\n new Event()\n );\n tabsChangeEvent: Event<{ tabs: Tab[] }> = this.register(new Event());\n\n constructor(userSession: UserSession) {\n super();\n this.userSession = userSession;\n }\n\n init() {\n const getAffixRoutes = () => {\n let routes = this.userSession.vueRouter.getRoutes().slice();\n\n const affixRoutes: any[] = [];\n\n for (let i = 0; i < routes.length; i++) {\n const route = routes[i];\n\n if (route.meta?.affix === true) {\n affixRoutes.push(route);\n }\n }\n\n return affixRoutes;\n };\n\n const getAffixTabs = () => {\n return getAffixRoutes()\n .map((affixRoute) => {\n const route = this.userSession.router.getRouteByName(\n affixRoute.name as string\n );\n\n if (!route) {\n return null;\n }\n\n return this.createTab({\n id: affixRoute.path,\n title: route.title,\n affix: true,\n route: route,\n realRoute: affixRoute,\n });\n })\n .filter(Boolean) as Tab[];\n };\n\n this.setTabs(getAffixTabs());\n }\n\n getTabs() {\n return this._tabs;\n }\n\n getCurrentTab() {\n return this._currentTab;\n }\n\n setCurrentTab(tab: Tab | null) {\n if (this._currentTab === tab) {\n return;\n }\n\n this._currentTab = tab;\n\n this.currentTabChangeEvent.emit({ currentTab: tab });\n }\n\n getTabByID(id: string) {\n return this._tabs.find((tab) => tab.id === id) ?? null;\n }\n\n createTab(options: Omit<TabOptions, \"tabs\">) {\n return this.register(new Tab({ ...options, tabs: this }));\n }\n\n setTabs(tabs: Tab[]): void {\n this._tabs = tabs;\n\n this.tabsChangeEvent.emit({ tabs });\n }\n\n switchTab(tab: Tab | null) {\n // TODO 暂时用不到Tab\n\n // if (\n // this.getCurrentTab()?.realRoute?.fullPath === tab?.realRoute?.fullPath\n // ) {\n // return;\n // }\n\n this.setCurrentTab(tab);\n return;\n\n // if (!tab) {\n // this.setCurrentTab(null);\n // return;\n // }\n\n // let _tab = this._tabs.find((item) => item.getID() === tab.getID());\n\n // if (!_tab) {\n // this.setTabs([...this.getTabs(), tab]);\n // }\n\n // this.setCurrentTab(tab);\n }\n\n findTabByID(id: Tab[\"id\"]) {\n return this.getTabs().find((tab) => tab.id === id) ?? null;\n }\n\n async closeTab(tab: Tab) {\n if ((await tab.beforeCloseEvent.emitAsync()) === false) {\n return;\n }\n\n const tabItemList = this.getTabs().slice();\n\n if (this.getCurrentTab()?.getID() !== tab.getID()) {\n this.setTabs(tabItemList.filter((item) => item.getID() !== tab.getID()));\n\n return;\n }\n\n const index = tabItemList.findIndex((item) => item.getID() === tab.getID());\n\n if (index === -1) {\n return;\n }\n\n const deleteTab = tabItemList[index];\n deleteTab.dispose();\n\n tabItemList.splice(index, 1);\n this.setTabs(tabItemList);\n\n this.setCurrentTab(this._tabs[this._tabs.length - 1] ?? null);\n }\n\n closeAll() {\n const affixTabs = this.getTabs().filter((tab) => tab.affix);\n\n if (affixTabs.length) {\n this.setTabs(affixTabs);\n this.setCurrentTab(affixTabs[0]);\n return;\n }\n\n this.setTabs([this.getCurrentTab() ?? this.getTabs()[0]]);\n this.setCurrentTab(this.getTabs()[0]);\n }\n\n closeOther() {\n const currentTab = this.getCurrentTab();\n\n if (!currentTab) {\n return;\n }\n\n const affixTabs = this.getTabs().filter((tab) => tab.affix);\n\n if (affixTabs.length) {\n if (affixTabs.find((item) => item.getID() === currentTab.getID())) {\n this.setTabs(affixTabs);\n } else {\n this.setTabs([...affixTabs, currentTab]);\n }\n\n return;\n }\n\n this.setTabs([currentTab]);\n }\n}\n","import { DataTable, DataForm, DataTree } from \"@maketribe/dm\";\n\nexport type DataTableClass = {\n new (options: any): DataTable;\n};\n\nexport type DataFormClass = {\n new (options: any): DataForm;\n};\n\nexport type DataTreeClass = {\n new (options: any): DataTree;\n};\n\n/**\n * 数据模型缓存\n *\n * 如果需要让自定义数据模型可以交给该类缓存,需要完成以下约束\n * - 可以只传递name就可以创建出对应的类的实例\n */\nexport class DataModelDefines {\n static instance = new DataModelDefines();\n\n private _dataTableDefines: Map<string, DataTableClass>;\n private _dataFormDefines: Map<string, DataFormClass>;\n private _dataTreeDefines: Map<string, DataTreeClass>;\n\n constructor() {\n this._dataTableDefines = new Map();\n this._dataFormDefines = new Map();\n this._dataTreeDefines = new Map();\n }\n\n /**\n * 表格清单\n */\n getDataTableList(): Map<string, DataTableClass>{\n return this._dataTableDefines;\n }\n\n getDataTable(name: string): DataTable | null {\n const DataTableDefine = this._dataTableDefines.get(name);\n\n return DataTableDefine ? new DataTableDefine({}) : null;\n }\n\n getDataForm(name: string): DataForm | null {\n const DataFormDefine = this._dataFormDefines.get(name);\n\n return DataFormDefine ? new DataFormDefine({}) : null;\n }\n\n getDataTree(name: string): DataTree | null {\n const DataTreeDefine = this._dataTreeDefines.get(name);\n\n return DataTreeDefine ? new DataTreeDefine({}) : null;\n }\n\n registerDataTableDefine<T extends DataTableClass>(\n name: string,\n DataTableDefine: T\n ) {\n this._dataTableDefines.set(name, DataTableDefine);\n }\n\n registerDataFormDefine<T extends DataFormClass>(\n name: string,\n dataFormDefine: T\n ) {\n this._dataFormDefines.set(name, dataFormDefine);\n }\n\n registerDataTreeDefine<T extends DataTreeClass>(\n name: string,\n dataTreeDefine: T\n ) {\n this._dataTreeDefines.set(name, dataTreeDefine);\n }\n}\n","import type { MSAppClient } from \"./MSAppClient\";\nimport { PermissionPoint } from \"./PermissionPointManager\";\n\nexport type Role = {\n id: string;\n name: string;\n desc: string;\n};\n\nexport interface MemberInfo {\n id: number;\n account: string;\n email: string;\n nickName: string;\n avatar: string;\n isSuper: number;\n errorCount: string;\n errorDatetime: string;\n isLock: number;\n unlockDatetime: string;\n}\n\nexport class UserInfo {\n id: number;\n account: string;\n email: string;\n nickName: string;\n avatar: string;\n isLocked: boolean;\n isSuper: boolean;\n payload: any;\n\n roles: Role[];\n permissionPoints: PermissionPoint[];\n\n constructor(\n msAppClient: MSAppClient,\n payload: MemberInfo,\n roles: Role[],\n permissionPoints: PermissionPoint[]\n ) {\n this.id = payload.id;\n this.avatar = payload.avatar;\n this.account = payload.account;\n this.email = payload.email;\n this.nickName = payload.nickName;\n this.isLocked = payload.isLock === 1;\n this.isSuper = payload.isSuper === 1;\n this.roles = roles;\n this.permissionPoints = permissionPoints;\n try {\n this.avatar = payload.avatar\n ? payload.avatar.startsWith(\"http\")\n ? payload.avatar\n : new URL(payload.avatar, msAppClient.origin).toString()\n : \"\";\n } catch (e) {\n this.avatar = \"\";\n }\n\n this.payload = payload;\n }\n\n hasRole(name: Role[\"name\"]): boolean {\n return !!this.roles.find((role) => role.name === name);\n }\n\n hasPermissionPoint(key: string) {\n return !!this.permissionPoints.find(\n (permissionPoint) => permissionPoint.key === key\n );\n }\n}\n","import { Disposable, createDisposable } from \"@maketribe/utils\";\nimport type { UserSession } from \"./UserSession\";\n\nconst NORMALIZE_ROUTE_NAME_REG = /^dv\\/([^/]+)\\/([^/]+)(\\/.+)?$/;\n\nexport type Route = {\n id: string;\n name: string;\n title: string;\n menuId: string;\n iconName: string;\n route: string;\n};\n\nexport class Router extends Disposable {\n userSession: UserSession;\n\n routes: Route[] = [];\n\n constructor(userSession: UserSession) {\n super();\n\n this.userSession = userSession;\n }\n\n setRoutes(routes: Route[]) {\n this.routes = routes;\n }\n\n init() {\n const vueRouter = this.userSession.vueRouter;\n const vueRoutes = vueRouter.getRoutes();\n\n // 给有权限访问的页面,注册默认页面\n const defaultPageRoutes = this.routes.filter(\n (route) => !vueRoutes.find((item) => item.name === route.name)\n );\n\n for (const defaultPageRoute of defaultPageRoutes) {\n\n const match = defaultPageRoute.name.match(NORMALIZE_ROUTE_NAME_REG);\n\n if (match) {\n const name = match[1];\n const action = match[2];\n const meta = {name,title:defaultPageRoute.title,icon:defaultPageRoute.iconName };\n\n switch (action) {\n case \"single\":\n\n const [listType, type] = match[3].slice(1).split(\"/\");\n\n switch (listType) {\n case \"list\":\n switch (type) {\n case \"normal\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../pages/index/dv/default/single/list/normal.vue\"\n ),\n meta\n });\n break;\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../pages/index/dv/default/single/list/dialog.vue\"\n ),\n meta\n });\n break;\n }\n\n break;\n case \"tree\":\n switch (type) {\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../pages/index/dv/default/single/tree/dialog.vue\"\n ),\n meta\n });\n break;\n }\n break;\n case \"table-tree\":\n switch (type) {\n case \"dialog\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../pages/index/dv/default/single/table-tree/dialog.vue\"\n ),\n meta\n });\n break;\n case \"normal\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () =>\n import(\n \"../pages/index/dv/default/single/table-tree/normal.vue\"\n ),\n meta\n });\n }\n }\n\n break;\n case \"list\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}`,\n component: () => import(\"../pages/index/dv/default/table.vue\"),\n meta\n });\n break;\n case \"edit\":\n vueRouter.addRoute(\"mk-ms-layout\", {\n name: defaultPageRoute.name,\n path: defaultPageRoute.route || `/dv/${name}/edit/:id?`,\n component: () => import(\"../pages/index/dv/default/edit.vue\"),\n meta\n });\n break;\n // case \"add\":\n // vueRouter.addRoute(\"mk-ms-layout\", {\n // name: defaultPageRoute.name,\n // path: defaultPageRoute.route || `/dv/${name}/add`,\n // component: () => import(\"../pages/index/dv/default/add.vue\"),\n // meta\n // });\n // break;\n }\n }\n }\n\n this.register(\n createDisposable(() => {\n for (const defaultPageRoute of defaultPageRoutes) {\n vueRouter.removeRoute(defaultPageRoute.name);\n }\n })\n );\n }\n\n getRouteByName(name: string): Route | null {\n return this.routes.find((route) => route.name === name) ?? null;\n }\n\n getRouteByID(id: string): Route | null {\n return this.routes.find((route) => route.id === id) ?? null;\n }\n\n getRoutesByMenuID(menuId: Route[\"menuId\"]): Route[] {\n return this.routes.filter((route) => route.menuId === menuId);\n }\n}\n","export interface PermissionPoint {\n id: number;\n menuId: string;\n key: string;\n name: string;\n}\n\nexport class PermissionPointManager {\n permissionPoints: PermissionPoint[];\n\n constructor() {\n this.permissionPoints = [];\n }\n\n setPermissionPoints(permissionPoints: PermissionPoint[]) {\n this.permissionPoints = permissionPoints;\n }\n\n init() {}\n\n getPermissionPointsByMenuID(menuID: string): PermissionPoint[] {\n return this.permissionPoints.filter(\n (permissionPoint) => permissionPoint.menuId === menuID\n );\n }\n}\n","import { Disposable, Event, createDisposable, md5 } from \"@maketribe/utils\";\nimport { MemberInfo, UserInfo } from \"./UserInfo\";\nimport { Menu } from \"./menu\";\nimport { Tabs } from \"./tabs\";\nimport { Router, Route } from \"./Router\";\nimport type { Role } from \"./UserInfo\";\nimport {\n PermissionPoint,\n PermissionPointManager,\n} from \"./PermissionPointManager\";\nimport type { MSAppClient, LoginResult } from \"./MSAppClient\";\nimport { MenuData } from \"./menu\";\nimport { ACCESS_TOKEN_HEADER, AUTHORIZATION, AUTHORIZATION_PREFIX, R, X_ACCESS_TOKEN_HEADER, X_AUTHORIZATION } from \"@maketribe/request\";\n\nexport type UserSessionOptions = {\n msAppClient: MSAppClient;\n accessToken?: string;\n xAccessToken?: string;\n};\n\nlet uid = 0;\n\nexport class UserSession extends Disposable {\n id = uid++;\n\n msAppClient: MSAppClient;\n\n vueRouter: MSAppClient[\"vueRouter\"];\n\n userInfo: UserInfo | null;\n\n menu: Menu;\n\n tabs: Tabs;\n\n router: Router;\n\n permissionPointManager: PermissionPointManager;\n\n accessToken: string;\n\n xAccessToken: string;\n\n beforeInitRouterEvent: Event = this.register(new Event());\n\n locking: boolean = false;\n\n lockingChangeEvent: Event<{ locking: boolean }> = this.register(new Event());\n\n constructor(options: UserSessionOptions) {\n super();\n\n this.msAppClient = options.msAppClient;\n\n this.vueRouter = this.msAppClient.vueRouter;\n\n this.userInfo = null;\n\n this.router = this.register(new Router(this));\n this.tabs = this.register(new Tabs(this));\n this.permissionPointManager = new PermissionPointManager();\n this.menu = this.register(\n new Menu(this.permissionPointManager, this.router)\n );\n\n this.accessToken =\n options.accessToken ?? localStorage.getItem(ACCESS_TOKEN_HEADER) ?? \"\";\n this.xAccessToken =\n options.xAccessToken ?? localStorage.getItem(X_ACCESS_TOKEN_HEADER) ?? \"\";\n }\n\n async init() {\n type BasicInfoResult = {\n member: MemberInfo;\n menus: MenuData[];\n routes: Route[];\n roles: Role[];\n permissionPoints: PermissionPoint[];\n };\n\n const msAppClient = this.msAppClient;\n\n const httpRequest = msAppClient.httpRequest;\n\n const beforeRequestInterceptorID = httpRequest\n .getInterceptors()\n .request.use((config) => {\n if (this.accessToken) {\n config.headers[\n AUTHORIZATION\n ] = `${AUTHORIZATION_PREFIX} ${this.accessToken}`;\n }\n\n if (this.xAccessToken) {\n config.headers[\n X_AUTHORIZATION\n ] = `${AUTHORIZATION_PREFIX} ${this.xAccessToken}`;\n }\n\n return config;\n });\n\n const beforeResponseInterceptorID = httpRequest\n .getInterceptors()\n .response.use((config) => {\n if (config.data.code === 401) {\n this.accessToken = this.xAccessToken = \"\";\n } else {\n this.accessToken =\n config.headers[ACCESS_TOKEN_HEADER] || this.accessToken;\n\n this.xAccessToken =\n config.headers[X_ACCESS_TOKEN_HEADER] || this.xAccessToken;\n }\n\n localStorage.setItem(ACCESS_TOKEN_HEADER, this.accessToken);\n\n localStorage.setItem(X_ACCESS_TOKEN_HEADER, this.xAccessToken);\n\n return config;\n });\n\n this.register(\n createDisposable(() => {\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\n httpRequest\n .getInterceptors()\n .request.eject(beforeResponseInterceptorID);\n })\n );\n\n try {\n let response = await httpRequest.request<R<BasicInfoResult>>({\n url: \"/ms/app/login-info\",\n method: \"GET\",\n });\n\n if (!response.data || response.data.code !== 200) {\n return response;\n }\n\n const BasicInfoResult = response.data!;\n\n const { member, routes, menus, permissionPoints, roles } =\n BasicInfoResult.data!;\n\n this.userInfo = new UserInfo(\n msAppClient,\n member,\n roles,\n permissionPoints\n );\n\n this.router.setRoutes(routes);\n this.permissionPointManager.setPermissionPoints(permissionPoints);\n this.menu.setMenus(menus);\n\n this.tabs.init();\n\n this.beforeInitRouterEvent.emit();\n this.router.init();\n\n return response;\n } catch (e) {\n httpRequest.getInterceptors().request.eject(beforeRequestInterceptorID);\n httpRequest.getInterceptors().request.eject(beforeResponseInterceptorID);\n }\n }\n\n lock() {\n this.locking = true;\n\n this.lockingChangeEvent.emit({ locking: this.locking });\n }\n\n async unlock(password: string, code: string) {\n const response = await this.msAppClient.httpRequest.request<R<LoginResult>>(\n {\n url: \"/ms/ms-login/login\",\n method: \"POST\",\n data: {\n account: this.userInfo!.account,\n password: md5(`mkbl#${password}`),\n vCode: code,\n },\n }\n );\n\n if (response.data.code !== 200) {\n return response;\n }\n\n this.accessToken = response.headers[ACCESS_TOKEN_HEADER];\n this.xAccessToken = response.headers[X_ACCESS_TOKEN_HEADER];\n\n this.locking = false;\n\n this.lockingChangeEvent.emit({ locking: this.locking });\n\n return response;\n }\n\n public dispose(): void {\n this.msAppClient.httpRequest.get(\"/ms/app/logout\").finally(() => {\n localStorage.removeItem(ACCESS_TOKEN_HEADER);\n localStorage.removeItem(X_ACCESS_TOKEN_HEADER);\n });\n\n super.dispose();\n }\n}\n","import { reactive } from \"vue\";\nimport { DataTable, DataTableOptions } from \"@maketribe/dm\";\n\nexport const createDataTable = (\n dataTableOptions: DataTableOptions\n): DataTable => {\n return reactive(new DataTable(dataTableOptions)) as DataTable;\n};\n","import { reactive } from \"vue\";\nimport { DataForm, DataFormOptions } from \"@maketribe/dm\";\n\nexport const createDataForm = (dataFormOptions: DataFormOptions): DataForm => {\n return reactive(new DataForm(dataFormOptions)) as DataForm;\n};\n","import { InjectionKey, Ref } from \"vue\";\nimport { ConfigProviderProps } from \"./options\";\n\nexport type ConfigProviderContext = Partial<ConfigProviderProps>;\n\nexport const CONFIG_PROVIDER_CONTEXT_KEY: InjectionKey<\n Ref<ConfigProviderContext>\n> = Symbol(\"configProviderContextKey\");\n","import {\n App,\n MaybeRef,\n Ref,\n computed,\n getCurrentInstance,\n inject,\n provide,\n ref,\n unref,\n} from \"vue\";\nimport merge from \"lodash-es/merge\";\nimport {\n CONFIG_PROVIDER_CONTEXT_KEY,\n ConfigProviderContext,\n} from \"./constants\";\n\nconst globalConfig = ref<ConfigProviderContext>();\n\nexport function useGlobalConfig<\n K extends keyof ConfigProviderContext,\n D extends ConfigProviderContext[K]\n>(key?: K, defaultValue?: D): Ref<ConfigProviderContext[K] | D>;\n\nexport function useGlobalConfig(): Ref<ConfigProviderContext>;\n\nexport function useGlobalConfig(key?: keyof ConfigProviderContext,defaultValue = undefined) {\n const config = getCurrentInstance()\n ? inject(CONFIG_PROVIDER_CONTEXT_KEY, globalConfig)\n : globalConfig;\n\n if (key) {\n return computed(() => unref(config)?.[key] ?? defaultValue);\n }\n\n return config;\n}\n\n/**\n * 合并配置\n * @param cfg\n * @param oldCfg\n */\nfunction mergeConfig(cfg: any,oldCfg: any) : ConfigProviderContext{\n\n const newCfg:any = {};\n\n // 合并旧配置中已存在的属性\n Object.keys(oldCfg).forEach((k) => {\n if (cfg[k] !== undefined) { newCfg[k] = cfg[k]; }\n else if(oldCfg[k] !== undefined){ newCfg[k] = oldCfg[k] }\n });\n\n // 添加旧配置中不存在的新属性\n Object.keys(cfg).forEach((k) => {\n if (newCfg[k] === undefined && cfg[k] !== undefined) { newCfg[k] = cfg[k]; }\n });\n return newCfg;\n}\n\nexport function provideGlobalConfig( config: MaybeRef<ConfigProviderContext>, app?: App, global: boolean = false) {\n\n const inSetup = !!getCurrentInstance();\n const oldConfig = inSetup ? useGlobalConfig() : globalConfig;\n const provideFn = app?.provide ?? (inSetup ? provide : undefined);\n\n if (!provideFn) { throw new Error(\"\"); }\n const cfg = unref(config);\n // const contextValue = !oldConfig?.value ? cfg : mergeConfig(cfg,oldConfig.value);\n\n // 应用配置\n const context = computed(() => !oldConfig?.value ? cfg : mergeConfig(cfg,oldConfig.value));\n\n if(Object.keys(context.value).filter(key=> context.value[key as keyof ConfigProviderContext] !==undefined).length > 0) {\n\n provide(CONFIG_PROVIDER_CONTEXT_KEY, context);\n\n if (global || !globalConfig.value) {\n globalConfig.value = context.value;\n }\n }\n\n return context;\n}\n","import { ExtractPropTypes } from \"vue\";\nimport { Components } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { I18n } from \"@maketribe/locale\";\n\nexport const configProviderProps = buildProps({\n dataTableComponents: {\n type: Components,\n },\n dataFormComponents: {\n type: Components,\n },\n dataFilterComponents: {\n type: Components,\n },\n whereFilterComponents: {\n type: Components,\n },\n dataTableHeaderComponents: {\n type: Components,\n },\n i18n: {\n type: I18n,\n },\n});\n\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>;\n","import { computed, defineComponent, renderSlot, unref } from \"vue\";\nimport { provideGlobalConfig } from \"./composables.ts\";\nimport { configProviderProps } from \"./options\";\nimport { ElConfigProvider } from \"element-plus\";\n\nexport default defineComponent({\n name: \"MKConfigProvider\",\n inheritAttrs: false,\n props: configProviderProps,\n setup(props, { slots }) {\n provideGlobalConfig(props);\n\n const currentLocale = computed(() => props.i18n?.currentLanguage as any);\n\n return () => (\n <ElConfigProvider locale={unref(currentLocale)}>\n {renderSlot(slots, \"default\")}\n </ElConfigProvider>\n );\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport ConfigProvider from \"./ConfigProvider\";\n\nexport const MKConfigProvider = withInstall(ConfigProvider);\n\nexport default MKConfigProvider;\n\nexport * from \"./composables.ts\";\nexport * from \"./constants\";\n","import { unref, computed, Ref, MaybeRef, ComputedRef, watch, ref } from \"vue\";\nimport {\n Column,\n Component,\n ComponentsCombine,\n DataForm,\n DataTable,\n FilterColumn,\n DataFilter,\n FormColumn,\n IComponents,\n TableColumn,\n isWhereFilter,\n} from \"@maketribe/dm\";\nimport { useGlobalConfig } from \"../components/basic/ConfigProvider\";\n\nexport const useComponent = (\n componentName: MaybeRef<string>,\n components: MaybeRef<IComponents>\n): {\n componentInfo: ComputedRef<Component | null>;\n component: ComputedRef<any>;\n componentProps: ComputedRef<Record<string, any> | null>;\n} => {\n const componentInfo = computed(() =>\n unref(components).resolveComponent(unref(componentName))\n );\n\n const component = computed(() => unref(componentInfo)?.component ?? null);\n\n const componentProps = computed(() => {\n const componentProps = unref(componentInfo)?.defaultProps ?? null;\n\n return componentProps ? { ...componentProps } : null;\n });\n\n return { componentInfo, component, componentProps };\n};\n\nexport const useComponentWithDefault = (\n componentInfo: ReturnType<typeof useComponent>,\n defaultComponentInfo: ReturnType<typeof useComponent>\n) => {\n const _componentInfo = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.componentInfo)\n : unref(defaultComponentInfo.componentInfo)\n );\n\n const _componentProps = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.componentProps)\n : unref(defaultComponentInfo.componentProps)\n );\n\n const _component = computed(() =>\n unref(componentInfo.componentInfo)\n ? unref(componentInfo.component)\n : unref(defaultComponentInfo.component)\n );\n\n return {\n componentInfo: _componentInfo,\n componentProps: _componentProps,\n component: _component,\n };\n};\n\nexport type RenderInfo = {\n componentInfo: string | Component;\n componentProps: Record<string, any>;\n};\n\nexport const useRenderInfoComponent = (\n column: Ref<RenderInfo | null> | RenderInfo,\n components: Ref<IComponents> | IComponents\n) => {\n const columnComponentInfo = computed(\n () => unref(column)?.componentInfo || \"\"\n );\n\n const componentInfo: Ref<Component | null> = ref(null);\n watch(\n columnComponentInfo,\n (columnComponentInfo) => {\n if (typeof columnComponentInfo === \"string\") {\n const { componentInfo: _componentInfo } = useComponent(\n columnComponentInfo,\n components\n );\n\n componentInfo.value = unref(_componentInfo);\n return;\n }\n\n componentInfo.value = columnComponentInfo;\n },\n { immediate: true }\n );\n\n const component = computed(() => unref(componentInfo)?.component ?? null);\n const componentProps = computed(() => {\n const _componentInfo = unref(componentInfo);\n\n if (!_componentInfo) {\n return null;\n }\n\n return {\n ..._componentInfo.defaultProps,\n ...unref(column)?.componentProps,\n };\n });\n\n return {\n componentInfo: computed(() => unref(componentInfo)),\n component,\n componentProps,\n };\n};\n\nexport const useTableColumnComponent = (\n column: Ref<TableColumn | null> | TableColumn,\n dataTable: Ref<DataTable | null> | DataTable\n) => {\n const defaultDataTableComponents = useGlobalConfig(\"dataTableComponents\");\n\n const componentCombine = computed(() => {\n const _defaultDataTableComponents = unref(defaultDataTableComponents);\n\n const componentsList = ([unref(dataTable)] as IComponents[]).concat(\n _defaultDataTableComponents ? [_defaultDataTableComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKColumnText\", componentCombine)\n );\n};\n\nexport const useFormColumnComponent = (\n column: Ref<FormColumn | null> | FormColumn,\n dataForm: Ref<DataForm | null> | DataForm\n) => {\n const defaultDataFormComponents = useGlobalConfig(\"dataFormComponents\");\n\n const componentCombine = computed(() => {\n const _defaultDataFormComponents = unref(defaultDataFormComponents);\n\n const componentsList = ([unref(dataForm)] as IComponents[]).concat(\n _defaultDataFormComponents ? [_defaultDataFormComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKFormInput\", componentCombine)\n );\n};\n\nexport const useFilterColumnComponent = (\n column: Ref<FilterColumn | null> | FilterColumn,\n dataFilter: Ref<DataFilter | null> | DataFilter\n) => {\n const defaultDataFilterComponents = useGlobalConfig(\"dataFilterComponents\");\n const defaultWhereFilterComponents = useGlobalConfig(\"whereFilterComponents\");\n\n const componentCombine = computed(() => {\n const systemComponents = isWhereFilter(unref(dataFilter))\n ? unref(defaultWhereFilterComponents)\n : unref(defaultDataFilterComponents);\n\n const componentsList = ([unref(dataFilter)] as IComponents[]).concat(\n systemComponents ? [systemComponents] : []\n );\n\n return new ComponentsCombine({ componentsList });\n });\n\n return useComponentWithDefault(\n useRenderInfoComponent(column, componentCombine),\n useComponent(\"MKConditionInput\", componentCombine)\n );\n};\n","import { unref } from \"vue\";\nimport { I18n } from \"@maketribe/locale\";\nimport { useGlobalConfig } from \"../components/basic/ConfigProvider\";\n\nexport const useI18n = (): I18n | null => {\n return unref(useGlobalConfig(\"i18n\")) ?? null;\n};\n","import { EventCallback } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../core/MSAppClient\";\n\nexport const onTabBeforeClose = (callback: EventCallback<undefined>) => {\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeCloseEvent.once(\n callback\n );\n};\n","import { EventCallback } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../core\";\n\nexport const onTabRefresh = (callback: EventCallback<undefined>) => {\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeSwitchEvent.on(\n callback\n );\n};\n","import { EventCallback } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../core\";\n\nexport const onTabBeforeSwitch = (callback: EventCallback<undefined>) => {\n MSAppClient.instance!.userSession!.tabs.getCurrentTab()?.beforeCloseEvent.on(\n callback\n );\n};\n","import { MSAppClient, Tab } from \"../core\";\n\nexport const useCurrentTab = (): Tab | null =>\n MSAppClient.instance!.userSession!.tabs.getCurrentTab() ?? null;\n","import { HttpRequest } from \"@maketribe/request\";\nimport { MSAppClient } from \"../core\";\n\nexport const useHttpRequest = (): HttpRequest | null =>\n MSAppClient.instance?.httpRequest ?? null;\n","import { inject } from \"vue\";\nimport { MSAppClient } from \"../core\";\nimport { MSAPPCLIENT_CONTEXT_KEY } from \"../constants\";\n\nexport const useMSAppClient = (): MSAppClient => {\n const msAppClientContext = inject(MSAPPCLIENT_CONTEXT_KEY);\n return msAppClientContext?.msAppClient ?? MSAppClient.instance!;\n};\n","import { MSAppClient } from \"../core\";\n\nexport const useUserInfo = () =>\n MSAppClient.instance?.userSession?.userInfo ?? null;\n","import { DataForm, DataTable, Dialoger, Messager } from \"@maketribe/dm\";\nimport { isRef, onBeforeUnmount, Ref, ref, unref, watch } from \"vue\";\n\nexport type UseSingleViewOptions = {\n dataTable: Ref<DataTable | null> | DataTable;\n dataForm: Ref<DataForm | null> | DataForm;\n};\n\nexport const useSingleView = (options: UseSingleViewOptions) => {\n const isShowDataForm = ref(false);\n\n const handleDataTable = (dataTable: DataTable | null) => {\n if (dataTable) {\n dataTable.addRecordEvent.on(async ({ item }) => {\n const _dataForm = unref(options.dataForm);\n\n if (!_dataForm) {\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\n return;\n }\n\n isShowDataForm.value = true;\n\n _dataForm.addRecord(item);\n });\n\n dataTable.editRecordEvent.on(async ({ item }) => {\n const _dataForm = unref(options.dataForm);\n\n if (!_dataForm) {\n console.warn(`没有对应的 (${dataTable.name}) DataForm 实现`);\n return;\n }\n\n isShowDataForm.value = true;\n\n try {\n const response = await _dataForm.editRecord(item);\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n isShowDataForm.value = false;\n return;\n }\n } catch (e) {\n console.error(e);\n isShowDataForm.value = false;\n }\n });\n }\n };\n\n const handleDataForm = (dataForm: DataForm | null) => {\n if (dataForm) {\n dataForm.submittedEvent.on(() => {\n isShowDataForm.value = false;\n\n unref(options.dataTable)?.load();\n });\n\n dataForm.cancelEvent.on(() => {\n isShowDataForm.value = false;\n });\n }\n };\n\n if (isRef(options.dataTable)) {\n watch(\n options.dataTable,\n (dataTable, _, onCleanup) => {\n isShowDataForm.value = false;\n\n handleDataTable(dataTable);\n\n onCleanup(() => {\n dataTable?.clearSelection();\n dataTable?.dispose();\n });\n },\n { immediate: true }\n );\n } else {\n const dataTable = options.dataTable;\n handleDataTable(dataTable);\n\n onBeforeUnmount(() => {\n dataTable.clearSelection();\n dataTable.dispose();\n });\n }\n\n if (isRef(options.dataForm)) {\n watch(\n options.dataForm,\n (dataForm, _, onCleanup) => {\n isShowDataForm.value = false;\n\n handleDataForm(dataForm);\n\n onCleanup(() => {\n dataForm?.dispose();\n });\n },\n { immediate: true }\n );\n } else {\n const dataForm = options.dataForm;\n handleDataForm(dataForm);\n\n onBeforeUnmount(() => {\n dataForm.dispose();\n });\n }\n\n return { isShowDataForm };\n};\n\nexport const useSingleViewWithDialog = (options: UseSingleViewOptions) => {\n const { isShowDataForm } = useSingleView(options);\n\n watch(isShowDataForm, async (isShowDataForm) => {\n if (isShowDataForm) {\n await Dialoger.dataFormDialog({\n dataForm: unref(options.dataForm)!,\n customDataFormStatus: true,\n });\n }\n });\n};\n","import { computed, unref } from \"vue\";\nimport { DataForm } from \"@maketribe/dm\";\n\n/**\n * 使用数据表单\n * @param dataForm\n */\nexport function useDataForm(dataForm:DataForm) {\n return {\n /**\n * 数据表单\n */\n dataForm,\n /**\n * 初始化\n * @param formData\n */\n initialize : async (formData?:any)=>{\n\n await dataForm.init();\n\n if(formData[dataForm.primaryKey]){\n await dataForm.editRecord(formData[dataForm.primaryKey])\n }\n else{\n await dataForm.addRecord(formData)\n }\n },\n\n /**\n * 是否改变\n */\n isChange : computed(() => unref(dataForm).isChanged)\n }\n}\n","// 该文件为系统默认配置,请勿修改!!!\n\nimport type { RecursiveRequired, Settings } from \"./typings/global\"\n\nconst globalSettingsDefault: RecursiveRequired<Settings.all> = {\n app: {\n colorScheme: 'light',\n enableMournMode: false,\n enableColorAmblyopiaMode: false,\n enablePermission: false,\n enableProgress: true,\n enableDynamicTitle: false,\n routeBaseOn: 'frontend',\n },\n home: {\n enable: true,\n title: '主页',\n fullPath: '/',\n },\n layout: {\n enableMobileAdaptation: false,\n },\n menu: {\n baseOn: 'frontend',\n mode: 'side',\n switchMainMenuAndPageJump: false,\n subMenuUniqueOpened: true,\n subMenuCollapse: false,\n enableSubMenuCollapseButton: false,\n enableHotkeys: false,\n },\n topbar: {\n mode: 'static',\n },\n tabbar: {\n enable: false,\n enableIcon: false,\n enableHotkeys: false,\n },\n toolbar: {\n breadcrumb: false,\n navSearch: false,\n fullscreen: true,\n message: false,\n shortcutMenus:[]\n },\n mainPage: {\n enableHotkeys: true,\n },\n navSearch: {\n enableHotkeys: true,\n },\n copyright: {\n enable: false,\n dates: '',\n company: '',\n website: '',\n beian: '',\n },\n}\n\nexport default globalSettingsDefault\n","import { defaultsDeep } from \"lodash-es\";\nimport type { RouteMeta } from \"vue-router\";\nimport type { Settings } from \"../../../typings/global\";\nimport { defineStore } from \"pinia\";\nimport { ref, watch } from \"vue\";\nimport { useMSAppClient } from '../../../composables'\nimport globalSettingsDefault from \"../../../settings.default.ts\";\n\nconst useSettingsStore = defineStore(\n // 唯一ID\n \"settings\",\n () => {\n\n const settingsDefault = defaultsDeep(useMSAppClient().settings,globalSettingsDefault);\n\n const settings = ref(settingsDefault);\n\n const prefersColorScheme = window.matchMedia(\n \"(prefers-color-scheme: dark)\"\n );\n const currentColorScheme = ref<Exclude<Settings.app[\"colorScheme\"], \"\">>();\n watch(\n () => settings.value.app.colorScheme,\n (val) => {\n if (val === \"\") {\n prefersColorScheme.addEventListener(\"change\", updateTheme);\n } else {\n prefersColorScheme.removeEventListener(\"change\", updateTheme);\n }\n },\n {\n immediate: true,\n }\n );\n watch(() => settings.value.app.colorScheme, updateTheme, {\n immediate: true,\n });\n function updateTheme() {\n let colorScheme = settings.value.app.colorScheme;\n if (colorScheme === \"\") {\n colorScheme = prefersColorScheme.matches ? \"dark\" : \"light\";\n }\n currentColorScheme.value = colorScheme;\n switch (colorScheme) {\n case \"light\":\n document.documentElement.classList.remove(\"dark\");\n break;\n case \"dark\":\n document.documentElement.classList.add(\"dark\");\n break;\n }\n }\n watch([\n () => settings.value.app.enableMournMode,\n () => settings.value.app.enableColorAmblyopiaMode,\n ],\n (val) => {\n document.documentElement.style.removeProperty(\"filter\");\n if (val[0] && val[1]) {\n document.documentElement.style.setProperty(\n \"filter\",\n \"grayscale(100%) invert(80%)\"\n );\n } else if (val[0]) {\n document.documentElement.style.setProperty(\n \"filter\",\n \"grayscale(100%)\"\n );\n } else if (val[1]) {\n document.documentElement.style.setProperty(\"filter\", \"invert(80%)\");\n }\n },\n {\n immediate: true,\n }\n );\n\n watch(\n () => settings.value.menu.mode,\n (val) => {\n document.body.setAttribute(\"data-menu-mode\", val);\n },\n {\n immediate: true,\n }\n );\n\n // 操作系统\n const os = ref<\"mac\" | \"windows\" | \"linux\" | \"other\">(\"other\");\n const agent = navigator.userAgent.toLowerCase();\n switch (true) {\n case agent.includes(\"mac os\"):\n os.value = \"mac\";\n break;\n case agent.includes(\"windows\"):\n os.value = \"windows\";\n break;\n case agent.includes(\"linux\"):\n os.value = \"linux\";\n break;\n }\n\n // 页面标题\n const title = ref<RouteMeta[\"title\"]>();\n // 记录页面标题\n function setTitle(_title: RouteMeta[\"title\"]) {\n title.value = _title;\n }\n\n // 显示模式\n const mode = ref<\"pc\" | \"mobile\">(\"pc\");\n // 设置显示模式\n function setMode(width: number) {\n if (settings.value.layout.enableMobileAdaptation) {\n // 先判断 UA 是否为移动端设备(手机&平板)\n if (\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n )\n ) {\n mode.value = \"mobile\";\n } else {\n // 如果是桌面设备,则根据页面宽度判断是否需要切换为移动端展示\n mode.value = width < 1024 ? \"mobile\" : \"pc\";\n }\n } else {\n mode.value = \"pc\";\n }\n }\n\n // 切换侧边栏导航展开/收起\n function toggleSidebarCollapse() {\n settings.value.menu.subMenuCollapse =\n !settings.value.menu.subMenuCollapse;\n }\n // 次导航是否收起(用于记录 pc 模式下最后的状态)\n const subMenuCollapseLastStatus = ref(settingsDefault.menu.subMenuCollapse);\n watch(\n () => settings.value.menu.subMenuCollapse,\n (val) => {\n if (mode.value === \"pc\") {\n subMenuCollapseLastStatus.value = val;\n }\n }\n );\n watch(\n mode,\n (val) => {\n switch (val) {\n case \"pc\":\n settings.value.menu.subMenuCollapse =\n subMenuCollapseLastStatus.value;\n break;\n case \"mobile\":\n settings.value.menu.subMenuCollapse = true;\n break;\n }\n document.body.setAttribute(\"data-mode\", val);\n },\n {\n immediate: true,\n }\n );\n\n // 设置主题颜色模式\n function setColorScheme(color: Required<Settings.app>[\"colorScheme\"]) {\n settings.value.app.colorScheme = color;\n }\n\n // 更新应用配置\n function updateSettings(data: Settings.all, fromBase = false) {\n settings.value = defaultsDeep(\n data,\n fromBase ? settingsDefault : settings.value\n );\n }\n\n return {\n settings,\n currentColorScheme,\n os,\n title,\n setTitle,\n mode,\n setMode,\n subMenuCollapseLastStatus,\n toggleSidebarCollapse,\n setColorScheme,\n updateSettings,\n };\n }\n);\n\nexport default useSettingsStore;\n","import path from 'path-browserify'\n\nexport function resolveRoutePath(basePath?: string, routePath?: string) {\n return basePath ? path.resolve(basePath, routePath ?? '') : routePath ?? ''\n}\n","import {cloneDeep} from 'lodash-es'\nimport type {RouteRecordRaw} from 'vue-router'\nimport useSettingsStore from './settings.ts'\nimport {resolveRoutePath} from '../../utils'\nimport type {Menu, Route} from \"../../../typings/global\";\nimport {defineStore} from 'pinia'\nimport {computed, ref} from 'vue'\nimport {MenuNode, MSAppClient} from \"../../../core\";\n\nconst useMenuStore = defineStore('menu',() => {\n\n const settingsStore = useSettingsStore()\n // const userStore = useUserStore()\n // const routeStore = useRouteStore()\n\n const menu = MSAppClient.instance!.userSession!.menu\n\n // const filesystemMenusRaw = ref<Menu.recordMainRaw[]>([])\n const filesystemMenusRaw = ref<Menu.recordMainRaw[]>([])\n const actived = ref(0)\n\n function convertMenu(menuNodes: MenuNode[]) {\n\n const returnMenus: Menu.recordMainRaw[] = []\n\n for (const menuNode of menuNodes) {\n\n const menuItem: Menu.recordMainRaw = {\n meta: {\n title: menuNode.title,\n icon: menuNode.iconName,\n auth: \"\",\n type: menuNode.type\n },\n name: menuNode.route?.name ?? menuNode.id,\n children: [],\n }\n\n menuItem.children = convertMenuRecursive(menuNode.children)\n returnMenus.push(menuItem)\n }\n\n return returnMenus;\n }\n\n function convertMenuRecursive(menuNodes: MenuNode[], basePath = '') {\n\n const returnMenus: Menu.recordRaw[] = []\n\n for (const menuNode of menuNodes) {\n const menuItem: Menu.recordRaw = {\n path: menuNode.urlType == 1 ? resolveRoutePath(basePath, menuNode.path) : \"\",\n name: menuNode.route?.name ?? menuNode.id,\n group:!menuNode.route?.name,\n routes:menuNode.routes?.map(item=>item.name) ?? [],\n meta: {\n title: menuNode.title,\n icon: menuNode.iconName,\n defaultOpened: false,\n auth: '',\n menu: true,\n link: menuNode.urlType == 2 ? menuNode.path : \"\",\n }\n }\n if (menuNode.children) {\n menuItem.children = convertMenuRecursive(menuNode.children, menuItem.path)\n }\n returnMenus.push(menuItem)\n }\n\n return returnMenus;\n }\n\n // 完整导航数据\n const allMenus = computed(() => {\n let returnMenus: Menu.recordMainRaw[] = []\n\n if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {\n returnMenus = convertMenu(menu.rootMenus);\n }\n else {\n returnMenus = filesystemMenusRaw.value\n }\n // 如果权限功能开启,则需要对导航数据进行筛选过滤\n // if (settingsStore.settings.app.enablePermission) {\n // returnMenus = filterAsyncMenus(returnMenus, userStore.permissions)\n // }\n return returnMenus\n })\n\n // 次导航数据\n const sidebarMenus = computed<Menu.recordMainRaw['children']>(() => {\n return allMenus.value.length > 0\n ? allMenus.value.length > 1\n ? allMenus.value[actived.value].children\n : allMenus.value[0].children\n : []\n })\n\n // 次导航第一层最深路径\n const sidebarMenusFirstDeepestPath = computed(() => {\n return sidebarMenus.value.length > 0\n ? getDeepestPath(sidebarMenus.value[0])\n : settingsStore.settings.home.fullPath\n })\n\n function getDeepestPath(menu: Menu.recordRaw, rootPath = '') {\n let path = ''\n if (menu.children) {\n const item = menu.children.find(item => item.meta?.menu !== false)\n if (item) {\n path = getDeepestPath(item, resolveRoutePath(rootPath, menu.path))\n }\n else {\n path = getDeepestPath(menu.children[0], resolveRoutePath(rootPath, menu.path))\n }\n } else {\n path = resolveRoutePath(rootPath, menu.path)\n }\n return path\n }\n\n // 默认展开的导航路径\n const defaultOpenedPaths = computed(() => {\n const defaultOpenedPaths: string[] = []\n if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {\n allMenus.value.forEach((item) => {\n defaultOpenedPaths.push(...getDefaultOpenedPaths(item.children))\n })\n }\n return defaultOpenedPaths\n })\n\n function getDefaultOpenedPaths(menus: Menu.recordRaw[]) {\n\n const defaultOpenedPaths: string[] = []\n\n menus.forEach((item) => {\n\n if (item.meta?.defaultOpened && item.children) {\n\n defaultOpenedPaths.push(item.name)\n\n const childrenDefaultOpenedPaths = getDefaultOpenedPaths(item.children)\n\n if (childrenDefaultOpenedPaths.length > 0) {\n defaultOpenedPaths.push(...childrenDefaultOpenedPaths)\n }\n }\n })\n return defaultOpenedPaths\n }\n\n // 判断是否有权限\n function hasPermission(permissions: string[], menu: Menu.recordMainRaw | Menu.recordRaw) {\n let isAuth = false\n if (menu.meta?.auth) {\n isAuth = permissions.some((auth) => {\n if (typeof menu.meta?.auth === 'string') {\n return menu.meta.auth !== '' ? menu.meta.auth === auth : true\n }\n else if (typeof menu.meta?.auth === 'object') {\n return menu.meta.auth.length > 0 ? menu.meta.auth.includes(auth) : true\n }\n else {\n return false\n }\n })\n }\n else {\n isAuth = true\n }\n return isAuth\n }\n\n // 根据权限过滤导航\n function filterAsyncMenus<T extends Menu.recordMainRaw[] | Menu.recordRaw[]>(menus: T, permissions: string[]): T {\n const res: any = []\n menus.forEach((menu) => {\n if (hasPermission(permissions, menu)) {\n const tmpMenu = cloneDeep(menu)\n if (tmpMenu.children && tmpMenu.children.length > 0) {\n tmpMenu.children = filterAsyncMenus(tmpMenu.children, permissions) as Menu.recordRaw[]\n tmpMenu.children.length > 0 && res.push(tmpMenu)\n } else {\n delete tmpMenu.children\n res.push(tmpMenu)\n }\n }\n })\n return res\n }\n\n // 生成导航(前端生成)\n async function generateMenusAtFront() {\n // filesystemMenusRaw.value = menu.filter(item => item.children.length !== 0)\n }\n\n // 生成导航(后端生成)\n async function generateMenusAtBack() {\n // await apiApp.menuList().then(async (res) => {\n // filesystemMenusRaw.value = (res.data as Menu.recordMainRaw[]).filter(item => item.children.length !== 0)\n // }).catch(() => {})\n }\n\n // 设置主导航\n function setActived(data: number | string) {\n if (typeof data === 'number') {\n // 如果是 number 类型,则认为是主导航的索引\n actived.value = data\n }\n else {\n\n const getIndex = () => {\n\n for (let index = 0, len = allMenus.value.length; index < len; index++) {\n\n let children = [allMenus.value[index]]\n\n for (let i = 0; i < children.length; i++) {\n\n const item:any = children[i];\n\n if (item.name === data || item.routes?.includes(data)) { return index; }\n\n if (Array.isArray(item.children)) {\n children = children.concat(item.children as any[]);\n }\n }\n }\n\n return -1;\n }\n\n\n const findIndex = getIndex();\n // 如果是 string 类型,则认为是路由,需要查找对应的主导航索引\n // const findIndex = allMenus.value.findIndex(item => item.children.some(r => data.indexOf(`${r.path}/`) === 0 || data === r.path))\n if (findIndex >= 0) {\n actived.value = findIndex\n }\n }\n }\n\n return {\n actived,\n allMenus,\n sidebarMenus,\n sidebarMenusFirstDeepestPath,\n defaultOpenedPaths,\n generateMenusAtFront,\n generateMenusAtBack,\n setActived,\n }\n },\n)\n\nexport default useMenuStore\n","import {RouteLocationNormalized, RouteLocationRaw} from \"vue-router\";\nimport type { MSAppClient } from \"../../core\";\nimport useSettingsStore from '../store/modules/settings.ts';\nimport useMenuStore from '../store/modules/menu.ts';\n\n\nexport const authBeforeEach = async (\n msAppClient: MSAppClient,\n to: RouteLocationNormalized,\n from: RouteLocationNormalized\n): Promise<RouteLocationRaw | void> => {\n\n\n if (to.meta.isAuthorization === false) {\n return;\n }\n\n let userSession = msAppClient.userSession;\n\n if (!userSession) {\n try {\n await msAppClient.loadCurrentUserSession();\n\n userSession = msAppClient.userSession;\n\n if (!userSession) {\n return {name: \"login\"};\n }\n\n const settingsStore = useSettingsStore();\n const menuStore = useMenuStore();\n\n // 因为登陆成功会添加用户可以访问的路由,这里给到vue-router去重新resolve\n return {path: to.path, query: to.query, params: to.params} as RouteLocationNormalized;\n }\n catch (e) {\n return {name: \"login\"};\n }\n }\n};\n","import { RouteRecordRaw } from \"vue-router\";\nimport type { MSAppClient } from \"./MSAppClient\";\nimport { Disposable, Event, createDisposable } from \"@maketribe/utils\";\n\nexport class PageManager {\n normalPages: RouteRecordRaw[] = [];\n\n extendsPages: RouteRecordRaw[] = [];\n\n msAppClient: MSAppClient | null = null;\n\n msAppClientChangeEvent: Event<{ msAppClient: MSAppClient | null }> =\n new Event();\n\n afterInitdEvent: Event = new Event();\n\n msAppClientDisposable: Disposable | null = null;\n\n setMSAppClient(msAppClient: MSAppClient | null) {\n\n this.msAppClientDisposable?.dispose();\n\n this.msAppClientDisposable = new Disposable();\n\n this.msAppClient = msAppClient;\n\n this.msAppClientChangeEvent.emit({ msAppClient });\n }\n\n addNormalPage(normalPage: RouteRecordRaw) {\n const index = this.normalPages.findIndex(\n (item) => item.name === normalPage.name\n );\n\n if (index > -1) {\n this.normalPages.splice(index, 1);\n }\n\n this.normalPages.push(normalPage);\n }\n\n addExtendsPage(extendsPage: RouteRecordRaw) {\n const index = this.extendsPages.findIndex(\n (item) => item.name === extendsPage.name\n );\n\n if (index > -1) {\n this.extendsPages.splice(index, 1);\n }\n\n this.extendsPages.push(extendsPage);\n }\n\n init() {\n this.addNormalPage({\n name: \"mk-ms-layout\",\n path: \"/\",\n component: () => import(\"../pages/index.vue\"),\n });\n\n this.addNormalPage({\n name: \"login\",\n path: \"/login\",\n meta: {\n isAuthorization: false,\n },\n component: () => import(\"../pages/login/index.vue\"),\n });\n\n this.addNormalPage({\n name: \"signup\",\n path: \"/signup\",\n meta: {\n isAuthorization: false,\n },\n component: () => import(\"../pages/signup/index.vue\"),\n });\n\n this.afterInitdEvent.emit();\n\n this.msAppClientChangeEvent.on(({ msAppClient }) => {\n\n if (!msAppClient) { return; }\n\n const vueRouter = msAppClient.vueRouter;\n const vueRoutes = vueRouter.getRoutes();\n\n const addedNormalPageNames: string[] = [];\n\n for (const normalPage of this.normalPages) {\n\n const vueRoute = vueRoutes.find((vueRoute) => vueRoute.name === normalPage.name);\n\n if (!vueRoute) {\n addedNormalPageNames.push(normalPage.name as string);\n vueRouter.addRoute(normalPage);\n }\n }\n\n this.msAppClientDisposable?.register(\n createDisposable(() => {\n for (const addedNormalPageName of addedNormalPageNames) {\n vueRouter.removeRoute(addedNormalPageName);\n }\n })\n );\n\n this.msAppClientDisposable?.register(\n msAppClient.beforeInitUserSessionEvent.on(({ userSession }) => {\n\n if (!userSession) { return; }\n\n userSession.beforeInitRouterEvent.on(() => {\n\n const router = userSession.router;\n\n const addedExtendsPageNames: string[] = [];\n\n for (const extendsPage of this.extendsPages) {\n\n const routeInfo = router.getRouteByName(extendsPage.name as string);\n\n if (!routeInfo) { continue; }\n\n const vueRoute = vueRoutes.find(\n (vueRoute) => vueRoute.name === extendsPage.name\n );\n\n if (!vueRoute) {\n extendsPage.path = routeInfo.route || extendsPage.path;\n addedExtendsPageNames.push(extendsPage.name as string);\n extendsPage.meta = Object.assign({ title:routeInfo.title,icon:routeInfo.iconName },extendsPage.meta)\n vueRouter.addRoute(\"mk-ms-layout\", extendsPage);\n }\n }\n\n if (!this.extendsPages.find((page) => page.name === \"notFound\")) {\n this.addExtendsPage({\n name: \"notFound\",\n path: \"/:pathMatch(.*)*\",\n component: () => import(\"../pages/index/404.vue\"),\n });\n }\n\n\n\n userSession.register(\n createDisposable(() => {\n for (const addedExtendsPageName of addedExtendsPageNames) {\n vueRouter.removeRoute(addedExtendsPageName);\n }\n })\n );\n });\n })\n );\n });\n }\n}\n","import { RouteRecordRaw } from \"vue-router\";\nimport { DATA_MODEL_NAME } from \"../constants\";\nimport {\n DataFormClass,\n DataTableClass,\n DataTreeClass,\n} from \"./DataModelDefines\";\nimport { Components, IComponents } from \"@maketribe/dm\";\nimport { App } from \"vue\";\n\nexport type MkModule = (module: InternalMkModule) => void;\n\n/**\n * 模块\n * 模块主要包含有以下几点\n * 1.dataview相关的表格表单等待,\n * 2.定制页面\n * 3.组件\n */\nexport class InternalMkModule {\n app: App;\n\n dataTableComponents: IComponents = new Components();\n\n dataFormComponents: IComponents = new Components();\n\n dataFilterComponents: IComponents = new Components();\n\n whereFilterComponents: IComponents = new Components();\n\n dataTableClasses: DataTableClass[] = [];\n\n dataFormClasses: DataFormClass[] = [];\n\n dataTreeClasses: DataTreeClass[] = [];\n\n normalPages: RouteRecordRaw[] = [];\n\n extendsPages: RouteRecordRaw[] = [];\n\n constructor(app: App) {\n this.app = app;\n }\n\n /**\n * 注册DataTable\n * @param dataTableClass\n */\n registerDataTable(dataTableClass: DataTableClass) {\n const name = (dataTableClass as any)[DATA_MODEL_NAME];\n\n const existDataTableClass = this.dataTableClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataTableClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataTableClasses.push(dataTableClass);\n }\n\n /**\n * 注册DataForm\n * @param dataFormClass\n */\n registerDataForm(dataFormClass: DataFormClass) {\n const name = (dataFormClass as any)[DATA_MODEL_NAME];\n\n const existDataFormClass = this.dataFormClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataFormClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataFormClasses.push(dataFormClass);\n }\n\n /**\n * 注册DataTree\n * @param dataTreClass\n */\n registerDataTree(dataTreClass: DataTreeClass) {\n const name = (dataTreClass as any)[DATA_MODEL_NAME];\n\n const existDataTreeClass = this.dataTreeClasses.find(\n (item) => (item as any)[DATA_MODEL_NAME] === name\n );\n\n if (existDataTreeClass) {\n throw new Error(`已经存在相同name为 ${name} 的DataTable`);\n }\n\n this.dataTreeClasses.push(dataTreClass);\n }\n\n registerNormalPage(route: RouteRecordRaw) {\n this.normalPages.push(route);\n }\n\n registerExtendsPage(route: RouteRecordRaw) {\n this.extendsPages.push(route);\n }\n}\n","import {DataForm, DataFormOptions, FormColumn} from \"@maketribe/dm\";\nimport {DATA_MODEL_NAME, MODULE_NAME} from \"../../../constants\";\n\nexport type MsMaterialGroup = {\n id: string;\n desc: string;\n parentGroupId: string | null;\n};\n\nexport class MsMaterialGroupForm extends DataForm<MsMaterialGroup> {\n static [DATA_MODEL_NAME]: string = \"mk-material-group\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMaterialGroupForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({name: \"desc\", label: \"分组名称\", required: true}),\n new FormColumn({\n name: \"parentGroupId\",\n label: \"父材质组ID\",\n defaultValue: null,\n visible: false,\n }),\n ]);\n }\n\n formatSubmitData(data: any) {\n const {children, ...submitData} = data;\n\n return submitData;\n }\n}\n","import { DataTableOptions, DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { MsMaterialGroup } from \"./MsMaterialGroupForm\";\nimport { ResponseConfig, R } from \"@maketribe/request\";\nimport { DATA_MODEL_NAME } from \"../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\n\nexport type MsMaterialGroupNode = MsMaterialGroup & {\n children: MsMaterialGroupNode[];\n};\n\nexport class MsMaterialGroupTree extends DataTree<MsMaterialGroupNode> {\n static [DATA_MODEL_NAME]: string = \"mk-material-group\";\n\n currentDataTreeNode: DataTreeNode<MsMaterialGroupNode> | null;\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsMaterialGroupTree[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n props: { label: \"desc\", parent: \"parentGroupId\" },\n ...options,\n });\n\n this.currentDataTreeNode = null;\n }\n\n formatItem(item: MsMaterialGroupNode): MsMaterialGroupNode {\n item.children = item.children ?? [];\n\n return item;\n }\n\n load(\n params?: Record<string, any>\n ): Promise<\n ResponseConfig<R<MsMaterialGroupNode[]> & { totalRecCount: string }>\n > {\n return this.loadAll(params);\n }\n\n public nodeHasChildren(node: DataTreeNode<MsMaterialGroupNode>): boolean {\n return node.children.length > 0;\n }\n\n getCurrentNode() {\n if (this.currentDataTreeNode) {\n return this.currentDataTreeNode;\n }\n\n const getFirstNode = (\n nodes: DataTreeNode<MsMaterialGroupNode>[]\n ): DataTreeNode<MsMaterialGroupNode> | null => {\n const node = nodes[0];\n\n if (node.children.length) {\n return getFirstNode(node.children);\n }\n\n return node;\n };\n\n if (this.rootNodes.length === 0) {\n return null;\n }\n\n return (this.currentDataTreeNode = getFirstNode(this.rootNodes));\n }\n\n setCurrentNode(node: DataTreeNode<MsMaterialGroupNode> | null) {\n this.currentDataTreeNode = node;\n }\n}\n","import {DataForm, DataFormOptions, FormColumn} from \"@maketribe/dm\";\nimport {DATA_MODEL_NAME, MODULE_NAME} from \"../../constants\";\n\nexport type MsMaterial = {\n id: string;\n materialGroupId?: string | null;\n type: number;\n desc: string;\n path: string;\n};\n\nexport class MsMaterialForm extends DataForm<MsMaterial> {\n static [DATA_MODEL_NAME]: string = \"mk-material\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMaterialForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({name: \"id\", label: \"编号\"}),\n new FormColumn({name: \"type\", label: \"类型\"}),\n new FormColumn({name: \"desc\", label: \"描述\"}),\n new FormColumn({name: \"path\", label: \"路径\"}),\n ]);\n }\n\n formatItem(item: MsMaterial): MsMaterial {\n return {\n id: item.id,\n materialGroupId: item.materialGroupId ?? null,\n type: item.type,\n desc: item.desc,\n path: item.path,\n };\n }\n\n formatSubmitData(data: any) {\n return {\n id: data.id,\n materialGroupId: data.materialGroupId,\n type: data.type,\n desc: data.desc,\n path: data.path,\n };\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n FormColumn,\n IComponents,\n} from \"@maketribe/dm\";\nimport { ConfigComponents, ITypeResolver } from \"../../core\";\nimport { Disposable } from \"@maketribe/utils\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport type MsConfig<T = any> = {\n id: string;\n key: string;\n type: string;\n value: T;\n};\n\nexport type MsConfigFormOptions = DataFormOptions & {\n configComponent?: IComponents;\n};\n\nexport class MsConfigForm\n extends DataForm<MsConfig>\n implements ITypeResolver<MsConfig>\n{\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\n\n configComponent: IComponents;\n\n constructor(options: MsConfigFormOptions = {}) {\n super({\n name: MsConfigForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n this.configComponent = options.configComponent ?? new ConfigComponents();\n }\n\n protected async initialize() {\n await super.initialize();\n\n (window as any).configForm = this;\n\n const defaultType = \"string\";\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"key\", label: \"配置键\", required: true }),\n new FormColumn({\n name: \"type\",\n label: \"类型\",\n componentInfo: \"MKFormDataSelect\",\n defaultValue: defaultType,\n required: true,\n componentProps: {\n options: [\n { value: \"string\", label: \"字符串\" },\n { value: \"int\", label: \"整数\" },\n { value: \"json\", label: \"JSON\" },\n ],\n },\n }),\n new FormColumn({\n name: \"value\",\n label: \"配置值\",\n required: true,\n defaultValue: null,\n rules: [\n {\n validator: (rule, value, callback) => {\n if (this.data?.type === \"json\") {\n try {\n JSON.parse(value);\n } catch (e) {\n callback(new Error(\"JSON格式错误\"));\n }\n }\n\n callback();\n },\n },\n ],\n componentInfo: this.resolveType(defaultType),\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n defaultValue: \"\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n let disposable: Disposable | null = null;\n\n this.dataChangeEvent.on(({ data }) => {\n disposable?.dispose();\n\n if (!data) {\n return null;\n }\n\n disposable = new Disposable();\n\n const valueFormColumn = this.getColumn(\"value\")!;\n valueFormColumn.componentInfo =\n this.configComponent.resolveComponent(\n this.resolveItemType(this.data!)\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\n\n disposable.register(\n this.getColumn(\"type\")!.valueChangeEvent.on(() => {\n if (!this.data) {\n return;\n }\n\n const valueFormColumn = this.getColumn(\"value\")!;\n valueFormColumn.componentInfo =\n this.configComponent.resolveComponent(\n this.resolveItemType(this.data!)\n ) || this.configComponent.resolveComponent(\"MKFormInput\")!;\n\n this.data!.value = null;\n })\n );\n });\n }\n\n formatItem(item: MsConfig): MsConfig {\n let value = item.value;\n\n if (item.type !== \"json\") {\n try {\n value = JSON.parse(item.value);\n } catch (e) {}\n }\n\n return { ...item, value };\n }\n\n formatSubmitData(data: any) {\n return {\n ...data,\n value: data.type === \"json\" ? data.value : JSON.stringify(data.value),\n };\n }\n\n resolveType(type: string) {\n switch (type) {\n case \"int\":\n return \"MKConfigInputNumber\";\n case \"json\":\n return \"MKConfigJsonEditor\";\n default:\n return \"MKConfigInput\";\n }\n }\n\n resolveItemType(config: MsConfig) {\n return this.resolveType(config.type);\n }\n}\n","import {Where} from \"@maketribe/request\";\nimport {\n DataTable,\n DataTableOptions,\n TableColumn,\n TableActionColumn,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n FilterColumn,\n} from \"@maketribe/dm\";\nimport {MsConfig} from \"./MsConfigForm\";\nimport {R, ResponseConfig} from \"@maketribe/request\";\nimport {MSAppClient} from \"../../core\";\nimport {DATA_MODEL_NAME} from \"../../constants\";\nimport {MODULE_NAME} from \"../../constants\";\n\nexport class MsConfigTable extends DataTable<MsConfig> {\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\n\n private static _instance: MsConfigTable | null = null;\n\n static get instance(): MsConfigTable {\n if (!MsConfigTable._instance) {\n MsConfigTable._instance = new MsConfigTable();\n MsConfigTable._instance.init().then(() => {\n MsConfigTable._instance!.dataFilter.setReady();\n });\n }\n\n return MsConfigTable._instance;\n }\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsConfigTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n // sortFieldName: \"sortNo\",\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.dataFilter.setColumns([\n new FilterColumn({name: \"key\", label: \"配置键\", search: true}),\n ]);\n\n this.setColumns([\n new TableColumn({ name: \"key\", label: \"配置键\" }),\n new TableColumn({ name: \"memo\", label: \"备注\" }),\n // new TableColumn({\n // name: \"sortNo\",\n // label: \"排序\",\n // componentInfo: \"MKColumnSort\",\n // componentProps: {\n // // drag: true\n // }\n // }),\n new TableActionColumn(),\n ]);\n }\n\n formatItem(item: MsConfig): MsConfig {\n let value = item.value;\n\n try {\n value = JSON.parse(value);\n } catch (e) {\n }\n\n return {...item, value};\n }\n\n static async loadConfig<T = any>(\n key: string\n ): Promise<ResponseConfig<R<MsConfig<T>>>> {\n const where = new Where();\n\n where.addCondition(\"key\", \"=\", key);\n\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\n const response = await dataViewRequest.allList({\n data: {condition: where},\n });\n\n return {\n ...response,\n data: {\n ...response.data,\n data: response.data.data?.[0] ?? null,\n },\n };\n }\n\n static async getConfigValue<T = any>(key: string): Promise<T | null> {\n const where = new Where();\n\n where.addCondition(\"key\", \"=\", key);\n\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\n const response = await dataViewRequest.query({\n data: {condition: where, pc: 1, pn: 1},\n });\n\n if (response.data.code !== 200) {\n throw new Error(response.data.msg);\n }\n\n try {\n return JSON.parse(response.data.data[0]?.value);\n } catch {\n return null;\n }\n }\n\n static async setConfigValue(key: string, value: any) {\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\n\n const where = new Where();\n where.addCondition(\"key\", \"=\", key);\n\n const listResponse = await dataViewRequest.query({\n data: {condition: where, pc: 1, pn: 1},\n });\n\n if (listResponse.data.code !== 200) {\n throw new Error(listResponse.data.msg);\n }\n\n const response =\n listResponse.data.data.length === 0\n ? await dataViewRequest.add({key, value})\n : await dataViewRequest.update({\n ...listResponse.data.data[0],\n value,\n });\n\n return response.data;\n }\n}\n","import { defineAsyncComponent } from \"vue\";\nimport { Components } from \"@maketribe/dm\";\n\nexport class MsMaterialComponents extends Components {\n constructor() {\n super();\n\n this.registerComponent({\n name: \"MKImageView\",\n title: \"图片\",\n component: defineAsyncComponent(\n () => import(\"../../components/business/MaterialList/components/ImageView\")\n ),\n });\n\n this.registerComponent({\n name: \"MKFileView\",\n title: \"文件\",\n component: defineAsyncComponent(\n () => import(\"../../components/business/MaterialList/components/FileView\")\n ),\n });\n\n this.registerComponent({\n name: \"MKVideoView\",\n title: \"视频\",\n component: defineAsyncComponent(\n () => import(\"../../components/business/MaterialList/components/VideoView\")\n ),\n });\n }\n}\n","import {\n Component,\n DataTable,\n DataTableOptions, FormColumn,\n IComponents,\n Messager,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { MsMaterial, MsMaterialForm } from \"./MsMaterialForm\";\nimport { MsConfigTable } from \"../ms-config\";\nimport type { ITypeResolver } from \"../../core\";\nimport { DATA_MODEL_NAME, MODULE_NAME } from \"../../constants\";\nimport {MsMaterialGroupNode, MsMaterialGroupTree} from \"./ms-material-group\";\nimport { DvOpt, UploadError, WebFileUpload } from \"@maketribe/request\";\nimport { isEqual } from \"lodash-es\";\nimport {MsMaterialComponents} from \"./MsMaterialComponents.ts\";\nimport {unref} from \"vue\";\n\nexport type MsMaterialType = {\n value: number;\n accept: string;\n label: string;\n limit: number;\n};\n\nexport type MaterialTableOptions = DataTableOptions & {\n materialComponents?: IComponents;\n};\n\n// 获取默认选择好哦弄得素材分组\nfunction getDefaultSelectMaterialGroup(nodes: MsMaterialGroupNode[]): MsMaterialGroupNode | null {\n if (!nodes.length) {\n return null;\n }\n return getDefaultSelectMaterialGroup(nodes[0].children) ?? nodes[0];\n}\n\nexport class MsMaterialTable extends DataTable<MsMaterial> implements ITypeResolver<MsMaterial> {\n\n static [DATA_MODEL_NAME]: string = \"mk-material\";\n\n materialTypes: MsMaterialType[] = [];\n\n allowMaterialTypeValues: MsMaterialType[\"value\"][] = [];\n\n materialComponents: IComponents;\n\n currentMaterialGroupId: MsMaterialGroupNode[\"id\"] | null = null;\n\n currentMaterialType: MsMaterialType | null = null;\n\n // 素材上传\n upload: WebFileUpload;\n\n // 素材组\n materialGroupTree: MsMaterialGroupTree = this.register(new MsMaterialGroupTree());\n\n // 素材表单\n materialForm: MsMaterialForm;\n\n\n constructor(options: MaterialTableOptions = {}) {\n super({\n name: MsMaterialTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n // 初始化素材所需组件\n this.materialComponents = options.materialComponents ?? new MsMaterialComponents();\n\n // 初始化上传\n this.upload = new WebFileUpload({\n filters: [\n (file) => {\n\n if (!this.currentMaterialType) {\n throw new UploadError(\"不能上传文件,素材类型无效\");\n }\n\n if (this.currentMaterialType.limit * 1024 * 1024 < file.size) {\n throw new UploadError(\"文件太大不能上传\");\n }\n },\n ],\n });\n\n // 表单\n this.materialForm = this.register(new (class extends MsMaterialForm {\n formGroupTree:MsMaterialGroupTree\n constructor(groupTree:MsMaterialGroupTree) {\n super();\n this.formGroupTree = groupTree;\n }\n protected async initialize() {\n await super.initialize();\n this.setColumns([\n new FormColumn({\n name: \"materialGroupId\",\n label: \"素材组\",\n componentInfo: \"MKDataTreeSelect\",\n componentProps: {\n dataTree: this.formGroupTree,\n checkStrictly: false,\n },\n }),\n ]);\n }\n })(this.materialGroupTree))\n }\n\n protected async initialize() {\n await super.initialize();\n\n const dvOpt = DvOpt.createInstance({\n name: MsMaterialTable[DATA_MODEL_NAME],\n });\n\n\n // 上传\n this.upload.uploadEvent.on(({ uploadItem }) => {\n this.loadingManager.startLoading()\n uploadItem.completeEvent.once(async () => {\n\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\n Messager.error({ message: \"上传失败\" });\n return;\n }\n\n try {\n const response = await dvOpt.save({\n materialGroupId: this.currentMaterialGroupId,\n type: this.currentMaterialType.value!,\n desc: uploadItem.payload.name,\n path: uploadItem.response!.data.data.path,\n });\n\n if (response.code !== 200) {\n Messager.error({ message: response.msg });\n return;\n }\n } catch {\n Messager.error({ message: \"网络异常\" });\n }\n\n await this.load();\n await this.loadingManager.completeLoading()\n });\n });\n\n // 素材类型\n this.materialTypes = [\n { value: 1, accept: \"image/*\", limit: 10, label: \"图片\" },\n { value: 2, accept: \"video/*\", limit: 500, label: \"视频\" },\n { value: 4, accept: \"*\", limit: 100, label: \"文档\" },\n ];\n\n // 当前选择素材类型\n this.currentMaterialType = this.materialTypes[0];\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({\n name: \"type\",\n label: \"类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping:this.materialTypes.reduce((result, item) => {\n result[item.value] = result.label;\n return result;\n }, {} as Record<any, any>),\n },\n }),\n new TableColumn({ name: \"desc\", label: \"描述\" }),\n new TableColumn({ name: \"path\", label: \"路径\" }),\n ]);\n\n // 选择素材分组\n this.materialGroupTree.selectionChangeEvent.on(() => {\n const currentGroupId = this.materialGroupTree.getSelection()[0];\n\n if (!currentGroupId) {\n this.setList([]);\n }\n this.setCurrentMaterialGroupId(currentGroupId);\n });\n // 默认选中\n this.materialGroupTree.afterLoadEvent.on(() => {\n const list = this.materialGroupTree.getList();\n const defaultSelectGroup = getDefaultSelectMaterialGroup(list);\n if (defaultSelectGroup) {\n this.materialGroupTree.setSelection([defaultSelectGroup.id]);\n }\n });\n // 刷新\n this.materialForm.submittedEvent.on(() =>this.load());\n\n // 初始化树\n this.materialGroupTree.dataFilter.setReady();\n await this.materialGroupTree.init();\n await this.materialGroupTree.load();\n this.dataFilter.setReady();\n\n }\n\n getMaterialTypes(): MsMaterialType[] {\n if (!this.allowMaterialTypeValues.length) {\n return this.materialTypes;\n }\n\n return this.materialTypes.filter((materialType) =>\n this.allowMaterialTypeValues.includes(materialType.value)\n );\n }\n\n async loadMaterialTypes() {\n const configResponse = await MsConfigTable.loadConfig<MsMaterialType[]>(\n \"ms-material-types\"\n );\n\n if (configResponse.data.code !== 200 || !configResponse.data.data) {\n throw new Error();\n }\n\n const config = configResponse.data.data;\n\n this.materialTypes = config.value || [];\n }\n\n formatItem(item: MsMaterial): MsMaterial {\n return {\n id: item.id,\n materialGroupId: item.materialGroupId || null,\n type: item.type ? item.type : 1,\n desc: item.desc || \"\",\n path: item.path || \"\",\n };\n }\n\n resolveType(type: string): string {\n switch (type) {\n case \"1\":\n return \"MKImageView\";\n case \"2\":\n return \"MKVideoView\";\n case \"3\":\n return \"MKAudioView\";\n default:\n return \"MKDocumentView\";\n }\n }\n\n resolveItemType(item: MsMaterial): string {\n return this.resolveType(item.type.toString());\n }\n\n resolveMaterialComponent(item: MsMaterial): Component | null {\n return this.materialComponents.resolveComponent(this.resolveItemType(item));\n }\n\n // 设置分组id\n setCurrentMaterialGroupId(materialGroupId: MsMaterialGroupNode[\"id\"] | null) {\n this.currentMaterialGroupId = materialGroupId;\n this.attachMaterialTableCondition();\n }\n\n setCurrentMaterialType(materialType: MsMaterialType | null) {\n if (materialType?.value === this.currentMaterialType?.value) {\n return;\n }\n\n this.currentMaterialType = materialType;\n\n this.attachMaterialTableCondition();\n }\n\n setAllowMaterialTypeValues(\n allowMaterialTypeValues: MsMaterialType[\"value\"][]\n ) {\n const targetAllowMaterialTypeValues = allowMaterialTypeValues\n .slice()\n .sort();\n\n const originAllowMaterialTypeValues = this.allowMaterialTypeValues\n .slice()\n .sort();\n\n if (isEqual(targetAllowMaterialTypeValues, originAllowMaterialTypeValues)) {\n return;\n }\n\n this.allowMaterialTypeValues = allowMaterialTypeValues;\n\n this.setCurrentMaterialType(this.getMaterialTypes()[0] ?? null);\n }\n\n protected attachMaterialTableCondition() {\n if (!this.currentMaterialGroupId || !this.currentMaterialType) {\n return;\n }\n\n this.useCondition((defaultGroup) => {\n defaultGroup.clear();\n\n defaultGroup.addCondition(\n \"materialGroupId\",\n \"=\",\n this.currentMaterialGroupId\n );\n\n defaultGroup.addCondition(\"type\", \"=\", this.currentMaterialType!.value);\n });\n\n this.load();\n }\n\n /**\n * 销毁\n */\n dispose() {\n super.dispose();\n this.materialForm.dispose();\n this.materialGroupTree.dispose();\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, MODULE_NAME } from \"../../constants\";\nimport { Role } from \"../../core\";\n\nexport type MsRole = Role & { memo: string };\n\nexport class MsRoleForm extends DataForm<MsRole> {\n static [DATA_MODEL_NAME]: string = \"ms-role\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsRoleForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"name\", label: \"角色名\", required: true }),\n new FormColumn({ name: \"desc\", label: \"角色描述\", required: true }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n defaultValue: \"\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n this.getColumn(\"name\")!.disabled = dataFormType == DataFormType.UPDATE;\n });\n }\n\n formatItem(item: MsRole): MsRole {\n return {\n id: item.id,\n name: item.name || \"\",\n desc: item.desc || \"\",\n memo: item.memo || \"\",\n };\n }\n}\n","import {\n DataTable,\n DataTableOptions,\n TableColumn,\n FilterColumn,\n TableActionColumn,\n ActionButton,\n EditButton,\n DeleteButton,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport { MsRole } from \"./MsRoleForm\";\nimport { Event } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../../core\";\nimport { DATA_MODEL_NAME, MODULE_NAME } from \"../../constants\";\n\nexport class MsRoleTable<\n F extends MsRole = MsRole,\n T extends MsRole = MsRole\n> extends DataTable<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-role\";\n\n configRolePermissionEvent: Event<{ item: MsRole }> = this.register(\n new Event()\n );\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRoleTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.dataFilter.setColumns([\n new FilterColumn({\n name: \"name\",\n label: \"角色名\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"desc\",\n label: \"角色描述\",\n componentInfo: \"MKConditionInput\",\n }),\n ]);\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"name\", label: \"角色名\" }),\n new TableColumn({ name: \"desc\", label: \"角色描述\" }),\n new TableActionColumn({\n width: \"160px\",\n buttons: [\n new ActionButton({\n label: \"权限\",\n handler: (row: MsRole) => {\n this.configRolePermissionEvent.emit({ item: row });\n },\n }),\n new EditButton(),\n new DeleteButton(),\n ],\n }),\n ]);\n }\n\n formatItem(item: T): F {\n return {\n id: item.id,\n name: item.name || \"\",\n desc: item.desc || \"\",\n } as F;\n }\n}\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\nimport { ResponseConfig, R } from \"@maketribe/request\";\nimport { DATA_MODEL_NAME, MODULE_NAME } from \"../../../constants\";\n\nexport type MsRolePermissionPoint = {\n id: string;\n permissionPointDefId: string;\n roleId: string;\n};\n\nexport class MsRolePermissionPointTable extends DataTable<MsRolePermissionPoint> {\n static [DATA_MODEL_NAME]: string = \"ms-role-permission-point\";\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRolePermissionPointTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n loadRequest( params: Record<string, any>): Promise<ResponseConfig<R<MsRolePermissionPoint[]> & { totalRecCount: string }>> {\n return this.loadAllRequest(params);\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"id\", visible: false }),\n new TableColumn({ name: \"roleId\" }),\n new TableColumn({ name: \"permissionPointDefId\" }),\n ]);\n this.dataFilter.setReady();\n }\n}\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\nimport { ResponseConfig, R } from \"@maketribe/request\";\nimport { DATA_MODEL_NAME, MODULE_NAME } from \"../../../constants\";\n\n/**\n * 数据结构定义\n */\nexport type MsRoleRoute = {\n id: string;\n roleId: string;\n routeId: string;\n};\n\n/**\n * 角色路由\n */\nexport class MsRoleRouteTable extends DataTable<MsRoleRoute> {\n static [DATA_MODEL_NAME]: string = \"ms-role-route\";\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRoleRouteTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n loadRequest(\n params: Record<string, any>\n ): Promise<ResponseConfig<R<MsRoleRoute[]> & { totalRecCount: string }>> {\n return this.loadAllRequest(params);\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"id\", visible: false }),\n new TableColumn({ name: \"roleId\" }),\n new TableColumn({ name: \"routeId\" }),\n ]);\n this.dataFilter.setReady();\n }\n}\n","import {\n AddButton,\n DataTable,\n DataTableOptions,\n RefreshButton,\n TableActionColumn,\n TableColumn,\n TableHeaderItem\n} from \"@maketribe/dm\";\nimport type { MsMenuItem, MsMenuResult } from \"./MsMenuForm\";\nimport { MSAppClient } from \"../../core\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsMenuTable<T extends MsMenuItem = MsMenuItem> extends DataTable<\n MsMenuResult,\n T\n> {\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: MsMenuTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"title\", label: \"菜单描述\" }),\n new TableActionColumn(),\n ]);\n\n this.dataFilter.setReady()\n }\n\n formatItem(item: MsMenuResult): T {\n return {\n id: item.id,\n title: item.title || \"\",\n iconName: item.iconName || \"\",\n pid: item.pid || \"\",\n routeId: item.routeId,\n } as T;\n }\n}\n","<script setup lang=\"ts\">\n\nimport {computed} from \"vue\";\nimport { DataModelDefines } from \"../../../core\"\n\ndefineOptions({ name: 'RouteNameInput' })\n\nconst props = defineProps({\n modelValue: {\n type: String,\n default: \"\"\n },\n})\nconst emit = defineEmits([\"update:modelValue\"])\n// 生成面板显示控制\nconst routeCreatePanelVisible = ref(false)\n// 路由值\nconst routeValue = computed({\n get: () => props.modelValue,\n set: (v) => {\n emit(\"update:modelValue\", v);\n },\n});\n// 数据视图list\nconst dataModelList = (DataModelDefines.instance.getDataTableList().keys() as any).filter((item:any)=>!!item).map((item:any)=>{\n return { value:item,label:item };\n})\n// 页面类型\nconst dataModelValue = ref(\"\");\n// 页面类型\nconst pageTypeValue = ref(0);\n// 页面类型\nconst listPageTypeValue = ref(0);\n// 页面类型\nconst formPageTypeValue = ref(0);\n// 页面定义\nconst pageDefines:any[] = [\n {\n name:\"single\",\n desc:\"普通数据页面\",\n list: [\n { name:\"list\", desc:\"普通表格\" },\n { name:\"table-tree\", desc:\"表格树\" },\n { name:\"tree\", desc:\"数据树\" }\n ],\n form:[\n { name:\"normal\", desc:\"普通页面\" },\n { name:\"dialog\", desc:\"列表页+编辑弹窗\" }\n ]\n },\n { name:\"table\", desc:\"单表格页面\" },\n { name:\"edit\", desc:\"单编辑页面\" }\n]\n\n\n// 生成函数\nconst createHandle = ()=>{\n const pageInfo = pageDefines[pageTypeValue.value];\n const listInfo = pageInfo.list ? pageInfo.list[listPageTypeValue.value] : null;\n const formInfo = pageInfo.form ? pageInfo.form[listPageTypeValue.value] : null;\n routeValue.value =\n dataModelValue.value ?\n `/dv/${dataModelValue.value}/${pageInfo.name}` + (listInfo ? `/${listInfo.name}`:\"\") + (formInfo ? `/${formInfo.name}` :\"\")\n : \"\";\n routeCreatePanelVisible.value=false\n}\n\n\n</script>\n\n<template>\n <el-input v-model=\"routeValue\">\n <template #append>\n <el-popover placement=\"right\" :width=\"400\" trigger=\"click\" title=\"页面路由生成\" :visible=\"routeCreatePanelVisible\">\n <template #reference>\n <el-button @click=\"routeCreatePanelVisible=true\">生成默认页面</el-button>\n </template>\n <div>\n <el-select v-model=\"dataModelValue\" filterable placeholder=\"选择数据视图\">\n <el-option v-for=\"item in dataModelList\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\" />\n </el-select>\n </div>\n <el-radio-group v-if=\"dataModelValue\" class=\"mt-2\" v-model=\"pageTypeValue\" >\n <el-radio-button v-for=\"(page,index) in pageDefines\" :label=\"page.desc\" :value=\"index\" />\n </el-radio-group>\n <el-radio-group class=\"mt-2\" v-if=\"dataModelValue && pageDefines[pageTypeValue]?.list\" v-model=\"listPageTypeValue\" >\n <el-radio-button v-for=\"(list,index) in pageDefines[pageTypeValue].list\" :label=\"list.desc\" :value=\"index\" />\n </el-radio-group>\n <el-radio-group class=\"mt-2\" v-if=\"dataModelValue && pageDefines[pageTypeValue]?.form\" v-model=\"formPageTypeValue\" >\n <el-radio-button v-for=\"(f,index) in pageDefines[pageTypeValue].form\" :label=\"f.desc\" :value=\"index\" />\n </el-radio-group>\n <div class=\"mt-4 text-align-end\">\n <el-button size=\"small\" @click=\"routeCreatePanelVisible=false\">取消</el-button>\n <el-button type=\"primary\" size=\"small\" @click=\"createHandle\">生成</el-button>\n </div>\n </el-popover>\n </template>\n </el-input>\n</template>\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../../constants\";\nimport { Route } from \"../../../core\";\nimport { MsMenuTable } from \"../MsMenuTable\";\nimport { MODULE_NAME } from \"../../../constants\";\nimport RouteNameInput from \"./RouteNameInput.vue\"\n\nexport type MsRouteResult = {\n id: string;\n name: string;\n title: string;\n type: number;\n menuId: string;\n iconName: string;\n route?: string;\n memo?: string;\n};\n\nexport type MsRoute = Route & { memo: string };\n\nexport class MsRouteForm extends DataForm<MsRouteResult, MsRoute> {\n static [DATA_MODEL_NAME]: string = \"ms-route\";\n\n constructor(options: DataFormOptions = {}) {\n super({ name: MsRouteForm[DATA_MODEL_NAME], ...options, moduleName: MODULE_NAME, });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"title\", label: \"标题\", required: true }),\n new FormColumn({ name: \"name\", label: \"名称\", required: true,componentInfo:{ component:RouteNameInput } }),\n new FormColumn({ name: \"route\", label: \"路由\" }),\n new FormColumn({\n name: \"menuId\",\n label: \"所属菜单\",\n componentInfo: \"MKFormDataTableSelect\",\n required: true,\n componentProps: {\n labelFieldName: \"title\",\n dataTable: new MsMenuTable({ pageSize: 10 }),\n },\n }),\n new FormColumn({\n name: \"iconName\",\n label: \"图标\",\n componentInfo: \"MKFormIconSelect\",\n }),\n\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n }\n\n formatSubmitData(data: any) {\n const type = Number.parseInt(data.type);\n\n return {\n ...data,\n iconName: data.iconName || null,\n };\n }\n\n formatItem(item: MsRouteResult): MsRoute {\n return {\n id: item.id,\n name: item.name || \"\",\n title: item.title || \"\",\n menuId: item.menuId,\n iconName: item.iconName || \"\",\n route: item.route || \"\",\n memo: item.memo || \"\",\n };\n }\n}\n","import {\n DataTable,\n DataTableOptions,\n TableColumn,\n FilterColumn,\n TableActionColumn,\n} from \"@maketribe/dm\";\nimport {unref} from \"vue\";\nimport {ElButton, ElCard, ElEmpty} from \"element-plus\";\nimport { MsRoute, MsRouteResult } from \"./MsRouteForm\";\nimport {useTableColumnComponent} from \"../../../composables\";\nimport { DATA_MODEL_NAME,MODULE_NAME } from \"../../../constants\";\nimport { MKListItem,MKSvgIcon } from \"../../../components\";\n\nexport class MsRouteTable extends DataTable<MsRouteResult, MsRoute> {\n\n static [DATA_MODEL_NAME]: string = \"ms-route\";\n\n constructor(options: DataTableOptions = {}) {\n super({ name: MsRouteTable[DATA_MODEL_NAME], ...options, moduleName: MODULE_NAME });\n }\n\n // 操作列\n actionColumn:TableActionColumn = new TableActionColumn()\n\n protected async initialize() {\n await super.initialize();\n\n // 筛选列\n this.dataFilter.setColumns([\n new FilterColumn({\n name: \"name\",\n label: \"路由名\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"title\",\n label: \"路由标题\",\n componentInfo: \"MKConditionInput\",\n }),\n ]);\n\n // 列\n this.setColumns([\n new TableColumn({ name: \"name\", label: \"名称\" }),\n new TableColumn({ name: \"title\", label: \"标题\" }),\n new TableColumn({ name: \"route\", label: \"路由\" }),\n this.actionColumn,\n ]);\n\n this.dataFilter.setReady();\n }\n\n /**\n * 字段格式化\n * @param item\n */\n formatItem(item: MsRouteResult): MsRoute {\n return {\n id: item.id,\n name: item.name || \"\",\n title: item.title || \"\",\n menuId: item.menuId,\n iconName: item.iconName || \"\",\n route: item.route || \"\",\n memo: item.memo || \"\",\n };\n }\n\n /**\n * 表格渲染函数\n * @param props\n * @param options\n */\n // render(props: any, options: any): any {\n // const { component, componentProps } = useTableColumnComponent(this.actionColumn, this)\n // const TableColumnComponent = toRaw(unref(component));\n //\n // const routeList = props.dataTable.getList();\n // const list = routeList.length ? routeList.map((item,index)=>{\n // return <MKListItem>\n // <div class={\"flex items-center\"}>\n // <MKSvgIcon name={item.iconName || \"ep:semi-select\"} class={!item.iconName?\"bg-[#ccc] color-white p-1\":\"\"} />\n // <b class={\"mx-1\"}>{item.title}</b>\n // {item.name} - {item.route}\n // </div>\n // <TableColumnComponent {...unref(componentProps)} column={unref(this.actionColumn)} index={index} row={item} />\n // </MKListItem>\n // }) : <ElEmpty size=\"small\" />\n //\n // return <ElCard shadow=\"never\" class=\"mk-table-view\">\n // {list}\n // <ElButton onClick={()=>props.dataTable.addRecord()}>添加</ElButton>\n // </ElCard>;\n // }\n}\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\nimport { MsMenuTable } from \"../MsMenuTable\";\nimport { DATA_MODEL_NAME } from \"../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\nimport { PermissionPointDefine } from \"../../../core\";\n\nexport type MsPermissionPointDefine = PermissionPointDefine & { memo: string };\n\nexport class MsPermissionPointDefineForm extends DataForm<MsPermissionPointDefine> {\n static [DATA_MODEL_NAME]: string = \"ms-permission-point-def\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsPermissionPointDefineForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({\n name: \"menuId\",\n label: \"所属菜单\",\n componentInfo: \"MKFormDataTableSelect\",\n required: true,\n componentProps: {\n labelFieldName: \"title\",\n dataTable: new MsMenuTable({ pageSize: 10 }),\n },\n }),\n new FormColumn({ name: \"key\", label: \"权限键\", required: true }),\n new FormColumn({ name: \"name\", label: \"权限描述\", required: true }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n }\n}\n","import {\n DataTable,\n DataTableOptions,\n FilterColumn,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { MsPermissionPointDefine } from \"./MsPermissionPointDefineForm\";\nimport { DATA_MODEL_NAME } from \"../../../constants\";\nimport { MODULE_NAME } from \"../../../constants\";\n\nexport class MsPermissionPointDefineTable<\n T extends MsPermissionPointDefine = MsPermissionPointDefine\n> extends DataTable<MsPermissionPointDefine, T> {\n static [DATA_MODEL_NAME]: string = \"ms-permission-point-def\";\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsPermissionPointDefineTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.dataFilter.setColumns([\n new FilterColumn({ name: \"key\", label: \"权限键\" }),\n new FilterColumn({ name: \"name\", label: \"权限描述\" }),\n ]);\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"key\", label: \"权限键\" }),\n new TableColumn({ name: \"name\", label: \"权限描述\" }),\n new TableActionColumn(),\n ]);\n this.dataFilter.setReady();\n }\n}\n","import { DataTable } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const abstractSelectProps = buildProps({\n modelValue: {\n type: null,\n },\n dataTable: {\n type: DataTable<any>,\n },\n objectValue: {\n type: Boolean,\n default: false,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n options: {\n type: Array,\n },\n primaryFieldName: {\n type: String,\n },\n labelFieldName: {\n type: String,\n },\n formatOptions: {\n type: Function,\n default: (item: any) => {\n const value = item.value ?? item.id ?? item.code ?? item.name;\n const label = item.label ?? item.desc ?? item.title ?? item.name;\n\n return { value, label };\n },\n },\n additional: {\n type: Boolean,\n default: true,\n },\n queryMode: {\n type: String,\n default: \"condition\",\n },\n});\n\nexport type AbstractSelectProps = ExtractPropTypes<typeof abstractSelectProps>;\n\nexport const abstractSelectEmits = {\n \"update:model-value\": (modelValue: any) => true,\n};\n\nexport type AbstractSelectEmits = typeof abstractSelectEmits;\n","import {\n computed,\n ComputedRef,\n defineComponent,\n Ref,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport {\n abstractSelectEmits,\n abstractSelectProps,\n} from \"./abstract-select-options\";\nimport { isEqual } from \"lodash-es\";\nimport { Where } from \"@maketribe/request\";\n\nexport type DataOptionItem = {\n value: any;\n label: string;\n data: any;\n children?: DataOptionItem[];\n};\n\nexport default defineComponent({\n name: \"MKAbstractSelect\",\n props: abstractSelectProps,\n emits: abstractSelectEmits,\n inheritAttrs: false,\n setup(props, { emit }) {\n\n const modelValue = computed({\n get: () => unref(props.modelValue),\n set: (v) => { emit(\"update:model-value\", v); },\n });\n\n // 选择\n const selections = computed(() => {\n if (props.objectValue) {\n return props.multiple\n ? modelValue.value?.map((item: any) => item[primaryKey.value]) ?? []\n : modelValue.value?.[primaryKey.value] ?? \"\";\n }\n return modelValue.value;\n });\n const innerSelections = ref(unref(modelValue));\n const selectRecords: Ref<any[]> = ref([]);\n const dataLoading:Ref<boolean> = ref(true);\n\n const primaryKey = computed(\n () => props.primaryFieldName ?? props.dataTable?.primaryKey ?? \"value\"\n );\n\n // 格式化\n const formatOptions = computed(() => {\n\n let value;\n\n if (props.labelFieldName) {\n value = (item: any) => {\n return {\n value: item[unref(primaryKey)],\n label: item[props.labelFieldName!],\n };\n };\n }\n else {\n value = props.formatOptions;\n }\n\n const innerFormatOptions = (item: any) => {\n\n const options = value(item) as DataOptionItem;\n\n options.data = item;\n\n if (Array.isArray(item.children)) {\n options.children = item.children.map(innerFormatOptions);\n }\n\n return options as DataOptionItem;\n };\n\n return innerFormatOptions;\n });\n\n // 选项\n const options: ComputedRef<DataOptionItem[]> = computed(() => {\n\n let options: DataOptionItem[] = [];\n\n if (props.dataTable) {\n options = props.dataTable.getList() .map((item) => formatOptions.value.call(null, item));\n }\n else if (Array.isArray(props.options)) {\n options = props.options.map((item) => formatOptions.value.call(null, item));\n }\n\n const optionValues = options.map((options) => options.value);\n\n let additionOptions: any[] = [];\n\n if (props.additional) {\n additionOptions = unref(selectRecords)\n .map(formatOptions.value)\n .filter(\n (additionOption) => !optionValues.includes(additionOption.value)\n );\n }\n return options.concat(additionOptions);\n });\n\n watch(modelValue, async (modelValue) => {\n\n let values: any;\n\n if (props.objectValue) {\n values = props.multiple\n ? modelValue?.map((item: any) => item[unref(primaryKey)]) ?? []\n : modelValue?.[unref(primaryKey)] ?? null;\n } else {\n values = modelValue;\n }\n\n if (!isEqual(values, unref(innerSelections))) {\n innerSelections.value = values;\n }\n\n },\n { immediate: true }\n );\n\n // 获取选中数据\n const getSelectDataOptions = async () => {\n\n const selections = unref(innerSelections);\n\n const recordIds = Array.isArray(selections) ? selections : selections ? [selections] : [];\n\n if (props.dataTable) {\n\n const dataTable = props.dataTable;\n\n let existingRecords = unref(options)\n .filter((option) => recordIds.includes(option.value))\n .map((item) => item.data);\n\n if (existingRecords.length !== recordIds.length) {\n\n // 排除的记录\n const notExistingRecords = recordIds.filter(\n (id:any) => !existingRecords.find((item) => item[primaryKey.value] === id)\n );\n\n // 条件\n let where:Where|undefined = undefined;\n // 加载参数\n const loadParams:any = {};\n\n // 筛选参数\n if(notExistingRecords.length > 0){\n if(props.queryMode == \"condition\"){\n where = new Where();\n if(props.multiple){\n where.clear().addCondition(unref(primaryKey), \"in\", `${notExistingRecords.join(\",\")}`);\n }\n else{\n where.clear().addCondition(unref(primaryKey), \"=\", notExistingRecords[0]);\n }\n }\n else{\n loadParams[primaryKey.value] = props.multiple ? notExistingRecords:notExistingRecords[0];\n }\n }\n\n const response = await dataTable.dataViewRequest.allList({\n data: { condition: where,...loadParams },\n })\n\n if (response.data.code === 200) {\n existingRecords = [...existingRecords, ...response.data.data];\n }\n }\n\n return recordIds\n .map((id:any) => existingRecords.find((item) => item[primaryKey.value] === id))\n .filter(Boolean);\n }\n else if (Array.isArray(props.options)) {\n return unref(options)\n .filter((option) => recordIds.includes(option.value))\n .map((item) => item.data);\n }\n\n return [];\n };\n\n watch(innerSelections,async (selections) => {\n\n try {\n dataLoading.value = true;\n selectRecords.value = await getSelectDataOptions();\n dataLoading.value = false;\n\n if (modelValue.value !== selections) {\n\n if (props.objectValue) {\n modelValue.value = props.multiple ? [...selectRecords.value] : selectRecords.value[0] ?? null;\n }\n else {\n modelValue.value = selections;\n }\n }\n }\n catch (error) {\n console.error(error);\n }\n },{ immediate: true });\n\n // 设置选中\n const setSelections = (v: any) => {\n innerSelections.value = v;\n };\n\n return {\n options,\n selections,\n selectRecords,\n setSelections,\n formatOptions,\n dataLoading\n };\n },\n render() {\n return this.$slots.default?.({\n options: this.options,\n selections: this.selections,\n selectRecords: this.selectRecords,\n setSelections: this.setSelections,\n formatOptions: this.formatOptions,\n dataLoading: this.dataLoading\n });\n },\n});\n","import AbstractSelect from \"./abstract-select\";\n\nexport const MKAbstractSelect = AbstractSelect;\n\nexport default MKAbstractSelect;\n\nexport * from \"./abstract-select-options\";\n","<script setup lang=\"ts\">\nimport {Icon} from '@iconify/vue'\n\ndefineOptions({\n name: 'MKSvgIcon',\n})\n\nconst props = defineProps<{\n name: string\n flip?: 'horizontal' | 'vertical' | 'both'\n rotate?: number\n color?: string\n size?: string | number\n}>()\n\nconst emits = defineEmits([\"click\"]);\n\nconst outputType = computed(() => {\n\n if (!props.name) {\n return '';\n }\n\n if (/^https?:\\/\\//.test(props.name)) {\n return 'img'\n } else if (/i-[^:]+:[^:]+/.test(props.name)) {\n return 'unocss'\n } else if (props.name.includes(':')) {\n return 'iconify'\n } else {\n return 'svg'\n }\n})\n\nconst style = computed(() => {\n const transform = []\n if (props.flip) {\n switch (props.flip) {\n case 'horizontal':\n transform.push('rotateY(180deg)')\n break\n case 'vertical':\n transform.push('rotateX(180deg)')\n break\n case 'both':\n transform.push('rotateX(180deg)')\n transform.push('rotateY(180deg)')\n break\n }\n }\n if (props.rotate) {\n transform.push(`rotate(${props.rotate % 360}deg)`)\n }\n return {\n ...(props.color && {color: props.color}),\n ...(props.size && {fontSize: typeof props.size === 'number' ? `${props.size}px` : props.size}),\n ...(transform.length && {transform: transform.join(' ')}),\n }\n})\n\nconst handleClick = (ev:any) => {\n emits(\"click\",ev);\n}\n</script>\n\n<template>\n <i v-if=\"outputType\"\n class=\"relative h-[1em] w-[1em] flex-inline items-center justify-center fill-current leading-[1em]\"\n :class=\"{ [name]: outputType === 'unocss' }\" :style=\"style\" @click=\"handleClick\">\n <Icon v-if=\"outputType === 'iconify'\" :icon=\"name\"/>\n <svg v-else-if=\"outputType === 'svg'\" class=\"h-[1em] w-[1em]\" aria-hidden=\"true\">\n <use :xlink:href=\"`#icon-${name}`\"/>\n </svg>\n <img v-else-if=\"outputType === 'img'\" :src=\"name\" class=\"h-[1em] w-[1em]\">\n </i>\n</template>\n","import { withInstall } from \"@maketribe/utils\";\nimport SvgIcon from \"./SvgIcon.vue\";\n\nexport const MKSvgIcon = withInstall(SvgIcon);\nexport default MKSvgIcon;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const buttonProps = buildProps({\n icon: {\n type: String,\n default: \"\",\n },\n label: {\n type: String,\n default: \"\",\n },\n type: {\n values: [\n \"\",\n \"default\",\n \"text\",\n \"success\",\n \"warning\",\n \"info\",\n \"primary\",\n \"danger\",\n ],\n },\n link: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>;\n\nexport const buttonEmits = {\n click: () => true,\n};\n\nexport type ButtonEmits = typeof buttonEmits;\n","import { ElButton } from \"element-plus\";\nimport { defineComponent } from \"vue\";\nimport MKSvgIcon from \"../SvgIcon\";\nimport { buttonEmits, buttonProps } from \"./button-options\";\n\nexport default defineComponent({\n name: \"MKButton\",\n props: buttonProps,\n emits: buttonEmits,\n setup(props, { emit }) {\n const handleClick = () => {\n emit(\"click\");\n };\n\n return () => {\n const icon = props.icon ? <MKSvgIcon class={props.label ? \"m-r-8px\":\"\"} name={props.icon} /> : null;\n\n const text = props.label ? (\n <span class=\"mk-button__text\">{props.label}</span>\n ) : null;\n\n return (\n <ElButton\n class=\"mk-button\"\n onClick={handleClick}\n type={props.type}\n link={props.link}\n >\n {icon}\n {text}\n </ElButton>\n );\n };\n },\n});\n","import Button from \"./button\";\n\nexport const MKButton = Button;\n\nexport default MKButton;\n\nexport * from \"./button-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\nimport { DataTable } from \"@maketribe/dm\";\n\nconst { options: _, ...restAbstractSelectProps } = abstractSelectProps;\n\nexport const dataTableSelectProps = buildProps({\n ...restAbstractSelectProps,\n dataTable: {\n type: DataTable<any>,\n required: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type DataTableSelectProps = ExtractPropTypes<\n typeof dataTableSelectProps\n>;\n\nexport const dataTableSelectEmits = {\n ...abstractSelectEmits,\n};\n\nexport type DataTableSelectEmits = typeof dataTableSelectEmits;\n","import { computed, defineComponent, ref, Ref, unref, watch } from \"vue\";\nimport { ElSelect } from \"element-plus\";\nimport { Grid } from \"@element-plus/icons-vue\";\nimport {\n dataTableSelectEmits,\n dataTableSelectProps,\n} from \"./options\";\nimport { MKAbstractSelect } from \"../../abstract\";\nimport { DataTable, Dialoger, TableSelectCacheColumn } from \"@maketribe/dm\";\n\nexport default defineComponent({\n name: \"MKDataTableSelect\",\n inheritAttrs: false,\n props: dataTableSelectProps,\n emits: dataTableSelectEmits,\n setup(props, { emit }) {\n\n const abstractSelectInstance: Ref<typeof MKAbstractSelect | null> =\n ref(null);\n\n const dataTable = computed(() => props.dataTable);\n\n const modelValue = computed({\n get: () => props.modelValue,\n set: (v) => emit(\"update:model-value\", v),\n });\n\n watch(\n computed(() => [unref(dataTable), props.multiple] as [DataTable, boolean]),\n ([dataTable, multiple]) => {\n dataTable.setSelectionColumn(new TableSelectCacheColumn({ multiple }));\n },\n { immediate: true }\n );\n\n const handleMousedown = async () => {\n\n if (props.disabled) { return; }\n\n const selections = unref(abstractSelectInstance)?.selections;\n\n dataTable.value.setSelection(props.multiple ? selections ?? [] : selections ? [selections] : []);\n\n const result = await Dialoger.dataTableSelectDialog(unref(dataTable)!);\n\n if (result.isConfirm) {\n unref(abstractSelectInstance)?.setSelections(\n props.multiple ? result.selections : result.selections[0]\n );\n }\n };\n\n return () => {\n return (\n <div class=\"mk-data-table-select\" onClick={handleMousedown}>\n <MKAbstractSelect\n modelValue={unref(modelValue)}\n onUpdate:model-value={(v: any) => {\n modelValue.value = v;\n }}\n ref={(el) => (abstractSelectInstance.value = el as any)}\n dataTable={props.dataTable}\n objectValue={props.objectValue}\n multiple={props.multiple}\n labelFieldName={props.labelFieldName}\n primaryFieldName={props.primaryFieldName}\n formatOptions={props.formatOptions}\n queryMode={props.queryMode}\n v-slots={{\n default: ({ selectRecords, formatOptions,dataLoading }: any) => {\n\n const options = selectRecords.map(formatOptions);\n\n return (\n <div v-loading={dataLoading}>\n <ElSelect\n disabled={props.disabled}\n multiple={props.multiple}\n suffixIcon={Grid}\n popperClass=\"mk-data-table-select__popper\"\n clearable\n modelValue={props.multiple ? options : options[0] ?? null}\n />\n </div>\n );\n },\n }}\n />\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport \"./index.scss\"\nimport DataTableSelect from \"./DataTableSelect\";\n\nexport const MKDataTableSelect = withInstall(DataTableSelect);\n\nexport default MKDataTableSelect;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { abstractSelectEmits, abstractSelectProps } from \"../../abstract\";\n\nexport const dataSelectProps = buildProps({\n ...abstractSelectProps,\n disabled: {\n type: Boolean,\n default: false,\n },\n allowCreate: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: false,\n },\n filterFieldNames: {\n type: Array<string>,\n default: () => [],\n },\n primaryKey: String,\n} as const);\n\nexport type DataSelectProps = ExtractPropTypes<typeof dataSelectProps>;\n\nexport const dataSelectEmit = {\n ...abstractSelectEmits,\n};\n\nexport type DataSelectEmit = typeof dataSelectEmit;\n","import { computed, defineComponent, onMounted, unref, watch } from \"vue\";\nimport { ElSelectV2, ElSelect,ElOption } from \"element-plus\";\nimport { dataSelectProps, dataSelectEmit } from \"./options\";\nimport { MKAbstractSelect } from \"../../abstract\";\nimport { debounce } from \"lodash-es\";\n\nexport type DataOptionItem = { value: any; label: string };\n\nexport default defineComponent({\n name: \"MKDataSelect\",\n props: dataSelectProps,\n emits: dataSelectEmit,\n setup(props, { emit }) {\n\n const loading = computed(() => props.dataTable?.loading ?? false);\n\n const modelValue = computed({\n get: () => unref(props.modelValue),\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n // 数据表\n watch(computed(() => props.dataTable),async (dataTable) => {\n // 初始化过就不重新初始化了\n if(dataTable && !dataTable.initd) {\n await dataTable.init();\n dataTable.dataFilter.setReady();\n await dataTable.load();\n }\n },{ immediate: true });\n\n // 筛选方法\n let beforeFilterValue:string = \"\";\n const filterMethod = debounce(async (value: string) => {\n if (props.dataTable && props.filterFieldNames.length && beforeFilterValue !== value) {\n // 记录之前筛选的值,没变化的话不加载\n beforeFilterValue = value;\n // 筛选\n props.dataTable.useCondition((group) => {\n\n group.clear();\n\n for (let fieldName of props.filterFieldNames) {\n group.addCondition(fieldName, \"like\", `%${value}%`);\n }\n });\n // 加载\n await props.dataTable.load();\n }\n }, 500);\n\n return () => {\n return (\n <MKAbstractSelect\n modelValue={unref(modelValue)}\n onUpdate:model-value={(v: any) => {\n modelValue.value = v;\n }}\n dataTable={props.dataTable}\n objectValue={props.objectValue}\n multiple={props.multiple}\n options={props.options}\n labelFieldName={props.labelFieldName}\n primaryFieldName={props.primaryFieldName}\n formatOptions={props.formatOptions}\n v-slots={{\n default: ({ options, selections, setSelections }: any) => {\n const children = unref(options).map((item: any) => (\n <ElOption\n key={item.value}\n value={item.value}\n label={item.label}\n />\n ));\n return (\n <ElSelect\n disabled={props.disabled}\n loading={unref(loading)}\n class=\"w-full\"\n modelValue={selections}\n onUpdate:modelValue={setSelections}\n filterMethod={filterMethod}\n multiple={props.multiple}\n allowCreate={props.allowCreate}\n filterable={props.filterable}\n clearable={props.clearable}\n >\n\n {children}\n </ElSelect>\n );\n },\n }}\n />\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport DataSelect from \"./DataSelect\";\n\nexport const MKDataSelect = withInstall(DataSelect);\nexport default MKDataSelect;\n\nexport * from \"./options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const paginationProps = buildProps({\n total: {\n type: Number,\n required: true,\n },\n currentPage: {\n type: Number,\n required: true,\n },\n pageSize: {\n type: Number,\n required: true,\n },\n pageSizes: {\n type: Array<number>,\n required: true,\n },\n} as const);\n\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>;\n\nexport const paginationEmits = {\n \"update:currentPage\": (currentPage: any) => typeof currentPage === \"number\",\n \"update:pageSize\": (pageSize: any) => typeof pageSize === \"number\",\n};\n\nexport type PaginationEmits = typeof paginationEmits;\n","import { ElPagination } from \"element-plus\";\nimport { defineComponent } from \"vue\";\nimport { paginationEmits, paginationProps } from \"./options\";\n\nexport default defineComponent({\n name: \"MKPagination\",\n props: paginationProps,\n emits: paginationEmits,\n setup(props, { emit }) {\n const handleCurrentPageChange = (currentPage: number) => {\n emit(\"update:currentPage\", currentPage);\n };\n\n const handlePageSizeChange = (pageSize: number) => {\n emit(\"update:pageSize\", pageSize);\n };\n\n return () => {\n return (\n <div class=\"mk-pagination\">\n <div class=\"mk-pagination__left\">\n 共<b>{props.total}</b>条记录 | 当前第\n <b>{props.currentPage}</b>页\n </div>\n <div class=\"mk-pagination__right\">\n <ElPagination\n background\n pageSizes={props.pageSizes}\n currentPage={props.currentPage}\n pageSize={props.pageSize}\n total={props.total}\n layout=\"prev, pager, next\"\n onUpdate:current-page={handleCurrentPageChange}\n onUpdate:page-size={handlePageSizeChange}\n />\n </div>\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Pagination from \"./Pagination\";\nimport \"./pagination.scss\"\nexport const MKPagination = withInstall(Pagination);\nexport default MKPagination;\n\nexport * from \"./options\";\n","import { defineAsyncComponent } from \"vue\";\nimport { withInstall } from \"@maketribe/utils\";\n\nexport const MKCodeEditor = withInstall(\n defineAsyncComponent(() => import(\"./Editor\"))\n);\n\nexport default MKCodeEditor;\n","import { defineAsyncComponent } from \"vue\";\nimport { withInstall } from \"@maketribe/utils\";\n\nexport const MKJsonEditor = withInstall(\n defineAsyncComponent(() => import(\"./Editor\"))\n);\n\nexport default MKJsonEditor;\n","import { buildProps } from \"@maketribe/utils\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const datePickerTypes = [\"date\", \"year\", \"month\", \"datetime\"] as const;\n\nexport const datePickerProps = buildProps({\n modelValue: {\n type: String,\n default: null,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n type: {\n default: \"date\",\n values: datePickerTypes,\n },\n valueFormat: {\n type: String,\n },\n});\n\nexport type DatePickerProps = ExtractPropTypes<typeof datePickerProps>;\n\nexport const datePickerEmits = {\n \"update:model-value\": (value: string) => true,\n};\n\nexport type DatePickerEmits = ExtractPropTypes<typeof datePickerEmits>;\n","import { computed, defineComponent, unref } from \"vue\";\nimport { ElDatePicker } from \"element-plus\";\nimport {\n datePickerTypes,\n datePickerProps,\n datePickerEmits,\n} from \"./options\";\n\nexport default defineComponent({\n name: \"MKFormDatePicker\",\n props: datePickerProps,\n emits: datePickerEmits,\n setup(props, { emit }) {\n const modelValue = computed({\n get: () => props.modelValue,\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n const disabled = computed(() => props.disabled);\n\n const type = computed(() =>\n datePickerTypes.includes(props.type) ? props.type : \"date\"\n );\n\n const valueFormat = computed(() => {\n if (props.valueFormat) {\n return props.valueFormat;\n }\n\n switch (unref(type)) {\n case \"datetime\":\n return \"YYYY-MM-DD HH:mm:ss\";\n case \"month\":\n return \"YYYY-MM\";\n case \"year\":\n return \"YYYY\";\n default:\n return \"YYYY-MM-DD\";\n }\n });\n\n return () => {\n return (\n <ElDatePicker\n class=\"mk-form-date-picker\"\n type={unref(type)}\n valueFormat={unref(valueFormat)}\n disabled={unref(disabled)}\n modelValue={unref(modelValue)}\n onUpdate:modelValue={(v: any) => (modelValue.value = v)}\n />\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport FormDatePicker from \"./DatePicker\";\n\nexport const MKFormDatePicker = withInstall(FormDatePicker);\n\nexport default MKFormDatePicker;\n\nexport * from \"./options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const iconSelectProps = buildProps({\n modelValue: {\n type: String,\n default: null,\n },\n size: {\n type: String,\n default: \"40px\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n});\n\nexport type IconSelectProps = ExtractPropTypes<typeof iconSelectProps>;\n\nexport const iconSelectEmits = {\n \"update:model-value\": (value: string) => true,\n};\n\nexport type IconSelectEmits = ExtractPropTypes<typeof iconSelectEmits>;\n","import {\n Ref,\n Fragment,\n computed,\n defineComponent,\n onMounted,\n ref,\n unref,\n watch,\n} from \"vue\";\n// import * as elIcons from \"@element-plus/icons-vue\";\nimport {MKSvgIcon} from \"../SvgIcon\";\nimport {iconSelectProps, iconSelectEmits} from \"./options\";\nimport {\n ElButton,\n ElInput,\n ElScrollbar,\n ElPopover,\n useFormItem as elUseFormItem,\n} from \"element-plus\";\n\nexport default defineComponent({\n name: \"MKFormIconSelect\",\n props: iconSelectProps,\n emits: iconSelectEmits,\n setup(props, {emit}) {\n const icons: Ref<string[]> = ref([]);\n\n // const search = ref(\"\");\n\n const modelValue = computed({\n get: () => props.modelValue,\n set: (v) => {\n emit(\"update:model-value\", v);\n },\n });\n\n // 搜索的图标\n const searchIconValue = ref(\"\")\n\n // 筛选的图片\n const filteredIcons = computed(() => {\n const search = (unref(searchIconValue) ?? \"\").toLowerCase().trim();\n return unref(icons).filter((icon) =>\n icon.toLowerCase().includes(search)\n );\n });\n\n const disabled = computed(() => props.disabled);\n\n const {formItem: elFormItem} = elUseFormItem();\n\n const handleClick = (icon: string) => {\n if (unref(disabled)) { return; }\n modelValue.value = icon;\n };\n\n const handleLinkClick = () => {\n window.open(\"https://icon-sets.iconify.design/\", \"__blank\")\n }\n\n\n onMounted(() => {\n\n const svgList: NodeListOf<SVGElement> = document.querySelectorAll(\n 'body > svg[aria-hidden=\"true\"]'\n );\n\n let iconList: string[] = [];\n\n for (const svg of Array.from(svgList)) {\n\n const symbols = svg.querySelectorAll(\"symbol\");\n\n iconList = iconList.concat(\n Array.from(symbols).map((symbol) => symbol.id.replace(/^icon-/, \"\"))\n );\n }\n\n icons.value = Array.from(new Set(iconList));\n });\n\n watch(\n modelValue,\n () => {\n elFormItem?.validate?.(\"change\");\n },\n {flush: \"post\"}\n );\n\n return () => {\n\n const selectIconValue = unref(modelValue);\n\n const children = unref(filteredIcons).map((icon) => (\n <span\n key={icon}\n class={[ \"mk-icon-select__icon-item\", icon === selectIconValue ? \"is-active\" : \"\", ]}\n onClick={() => handleClick(icon)}\n >\n <MKSvgIcon name={icon}/>\n </span>\n ));\n\n return (\n <div class=\"mk-icon-select w-[3em] text-align-end\" style={{fontSize: props.size}}>\n <ElPopover placement=\"right\" width=\"400\" trigger=\"click\" disabled={unref(disabled)} v-slots={\n {\n reference:()=> {\n return <div class=\"mk-border w-full h-[3em] flex justify-center items-center cursor-pointer pos-relative\">\n <MKSvgIcon style={{opacity:unref(modelValue)?1:0.2}} name={unref(modelValue) || 'ep:edit-pen'}/>\n <div class=\"mask\">\n <MKSvgIcon name={'ep:edit'}/>\n </div>\n </div>\n },\n default:()=>{\n return <Fragment>\n <ElInput\n modelValue={unref(searchIconValue)}\n onUpdate:modelValue={(v) => (searchIconValue.value = v)}\n placeholder=\"搜索图标\" clearable\n validateEvent={false}\n v-slots={{\n suffix: () => <MKSvgIcon name=\"ep:search\"/>\n }}\n />\n <div class={[ \"mk-icon-select__wrapper\", unref(disabled) ? \"is-disabled\" : \"\", ]} >\n <ElScrollbar height=\"100%\">{children}</ElScrollbar>\n </div>\n </Fragment>\n }\n }\n }>\n </ElPopover>\n <ElButton type=\"primary\" link onClick={handleLinkClick}>Iconify图标</ElButton>\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport \"./index.scss\"\nimport FormIconSelect from \"./IconSelect\";\n\nexport const MKFormIconSelect = withInstall(FormIconSelect);\nexport default MKFormIconSelect;\n","import { buildProps } from \"@maketribe/utils\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const imageCropperContentProps = buildProps({\n src: { type: String, required: true },\n fixedBox: { type: Boolean, default: false },\n maxWidth:{ type:Number,default:0},\n maxHeight:{ type:Number,default:0},\n ratioOptions: {\n type: Array,\n default: () => [],\n },\n} as const);\n\nexport type ImageCropperContentProps = ExtractPropTypes<\n typeof imageCropperContentProps\n>;\n\nexport const imageCropperContentEmits = {\n // \"update:model-value\": (modelValue: string) => true,\n};\n\nexport type ImageCropperContentEmits = typeof imageCropperContentEmits;\n","import {\n computed,\n defineComponent,\n ref,\n Ref,\n unref,\n watch,\n} from \"vue\";\nimport {VueCropper} from \"vue-cropper\";\nimport {MKSvgIcon} from \"../SvgIcon\";\nimport {\n imageCropperContentEmits,\n imageCropperContentProps,\n} from \"./options\";\nimport {\n ElForm,\n ElFormItem,\n ElInputNumber,\n ElOption,\n ElScrollbar,\n ElSelect,\n ElTooltip,\n} from \"element-plus\";\n\nexport type ImageCropperRatioOption = {\n value: string;\n label: string;\n width: number;\n height: number;\n};\n\n// const ORIGIN_RATIO = \"origin\";\nconst FREE_RATIO = \"free\";\n\nconst BASE64_PREFIX = /^data:image\\/([^;]+);base64,/;\n\nexport default defineComponent({\n name: \"MKImageContentCropper\",\n props: imageCropperContentProps,\n emits: imageCropperContentEmits,\n setup(props) {\n const cropperRef: Ref<any> = ref(null);\n\n const outputType = computed(() => {\n const base64Match = props.src.match(BASE64_PREFIX);\n\n if (base64Match?.[1]) {\n return base64Match?.[1];\n }\n\n const url = new URL(props.src, location.origin).toString();\n\n const index = url.lastIndexOf(\".\");\n\n if (index === -1) {\n return \"jpeg\";\n }\n\n return url.slice(index + 1) || \"jpeg\";\n });\n\n // const originRatioOption: ImageCropperRatioOption = reactive({\n // value: ORIGIN_RATIO,\n // label: \"原图比例\",\n // width: 1,\n // height: 1,\n // });\n\n const ratioOptions = computed(() => {\n return [\n ...props.ratioOptions.map((item: any) => ({\n ...item,\n value: item.value.toString(),\n })),\n // originRatioOption,\n {value: FREE_RATIO, label: \"自由比例\", width: 1, height: 1},\n\n ] as ImageCropperRatioOption[];\n });\n\n const autoCropWidth = ref(props.maxWidth);\n const autoCropHeight = ref(props.maxHeight);\n\n const currentRatio: Ref<string> = ref(ratioOptions.value[0].value);\n\n const maxWidth: Ref<number> = ref(props.maxWidth);\n const maxHeight: Ref<number> = ref(props.maxHeight);\n\n const enlarge = computed(() => {\n const width = unref(cropperRef)?.cropW ?? 1;\n const height = unref(cropperRef)?.cropH ?? 1;\n\n const ratio = unref(maxWidth) / unref(maxHeight);\n const cropRatio = width / height;\n\n return cropRatio > ratio\n ? unref(maxWidth) / width\n : unref(maxHeight) / height;\n });\n\n const setCurrentRatio = (value: string) => {\n currentRatio.value = value;\n };\n\n const isFixed = computed(() => unref(currentRatio) !== FREE_RATIO);\n\n const fixedNumber = computed(() => {\n const option = unref(ratioOptions).find(\n (option) => option.value === unref(currentRatio)\n );\n\n return [option?.width ?? 1, option?.height ?? 1];\n });\n\n watch(\n computed(() => props.src),\n (src) => {\n const image = new Image();\n image.src = src;\n\n image.onload = () => {\n\n if (!props.maxWidth) {\n autoCropWidth.value = image.naturalWidth;\n }\n\n if (props.maxHeight) {\n autoCropHeight.value = image.naturalHeight;\n }\n\n\n };\n },\n {immediate: true}\n );\n\n // watch(currentRatio, (currentRatio) => {\n // new MouseEvent(\"mousemove\", {});\n // // debugger;\n // unref(cropperRef).changeCropNow(new MouseEvent(\"mousemove\"));\n // });\n\n const handleRotateLeft = () => {\n unref(cropperRef).rotateLeft();\n };\n\n const handleRotateRight = () => {\n unref(cropperRef).rotateRight();\n };\n\n const setCropperRef = (el: any) => {\n cropperRef.value = el;\n };\n\n return {\n enlarge,\n maxWidth,\n maxHeight,\n outputType,\n cropperRef,\n ratioOptions,\n autoCropWidth,\n autoCropHeight,\n currentRatio,\n isFixed,\n fixedNumber,\n setCurrentRatio,\n setCropperRef,\n handleRotateLeft,\n handleRotateRight,\n };\n },\n render() {\n const {\n enlarge,\n maxWidth,\n maxHeight,\n outputType,\n ratioOptions,\n autoCropHeight,\n autoCropWidth,\n isFixed,\n fixedNumber,\n currentRatio,\n setCurrentRatio,\n setCropperRef,\n handleRotateLeft,\n handleRotateRight,\n $props,\n $slots,\n } = this;\n\n const ratioOptionsVNodes = unref(ratioOptions).map((ratioOption) => (\n <ElOption value={ratioOption.value} label={ratioOption.label}/>\n ));\n\n return (\n <div class=\"mk-image-cropper\">\n <div class=\"mk-image-cropper__main\">\n <VueCropper\n ref={setCropperRef}\n outputType={outputType}\n img={$props.src}\n auto-crop\n canMoveBox\n auto-crop-width={autoCropWidth}\n auto-crop-height={autoCropHeight}\n fixedBox={$props.fixedBox}\n fixed={isFixed}\n fixedNumber={fixedNumber}\n enlarge={enlarge}\n />\n\n <div class=\"mk-image-cropper__bar\">\n <ElTooltip content=\"右旋\">\n <MKSvgIcon name=\"hugeicons:rotate-top-right\" onClick={handleRotateRight} class=\"m-r-10px\"/>\n </ElTooltip>\n <ElTooltip content=\"左旋\">\n <MKSvgIcon name=\"hugeicons:rotate-top-left\" onClick={handleRotateLeft}/>\n </ElTooltip>\n </div>\n </div>\n\n <div class=\"mk-image-cropper__tools\">\n <ElScrollbar height=\"100%\">\n <ElForm label-position=\"top\">\n <ElFormItem label=\"比例\">\n <ElSelect\n placeholder=\"选择比例\"\n modelValue={currentRatio}\n onUpdate:modelValue={setCurrentRatio}\n >\n {ratioOptionsVNodes}\n </ElSelect>\n </ElFormItem>\n <ElFormItem label=\"最大输出宽度\">\n <ElInputNumber\n placeholder=\"宽度\"\n modelValue={maxWidth}\n onUpdate:modelValue={\n ((v: number) => (this.maxWidth = v)) as any\n }\n />\n </ElFormItem>\n\n <ElFormItem label=\"最大输出高度\">\n <ElInputNumber\n placeholder=\"高度\"\n modelValue={maxHeight}\n onUpdate:modelValue={\n ((v: number) => (this.maxHeight = v)) as any\n }\n />\n </ElFormItem>\n </ElForm>\n\n {$slots.tools?.()}\n </ElScrollbar>\n </div>\n </div>\n );\n },\n});\n","import { Dialoger } from \"@maketribe/dm\";\nimport ImageCropperContent, {\n ImageCropperRatioOption,\n} from \"./ImageCropper\";\nimport { ElButton } from \"element-plus\";\nimport { ref, Ref, unref, Fragment } from \"vue\";\n\nexport type MKImageCropperOptions = {\n src: string;\n ratioOptions?: Array<ImageCropperRatioOption>;\n fixedBox?: boolean;\n maxWidth?:number;\n maxHeight?:number;\n};\nexport type MKImageCropperResult = {\n isConfirm: boolean;\n data: string;\n size: { width: number; height: number };\n};\n\n/**\n * 图片裁切\n * @param options\n * @constructor\n */\nexport async function ImageCropper(options: MKImageCropperOptions): Promise<MKImageCropperResult> {\n const ratioOptions = options.ratioOptions ?? [];\n const fixedBox = options.fixedBox ?? false;\n\n return new Promise((resolve) => {\n const imageCropperContentEl: Ref<typeof ImageCropperContent | null> =\n ref(null);\n\n const handleCancelClick = () => {\n dialogInstance.destroy();\n\n resolve({\n isConfirm: false,\n data: \"\",\n size: { width: 0, height: 0 },\n });\n };\n\n const handleConfirmClick = async () => {\n dialogInstance.destroy();\n\n const cropperRef = unref(imageCropperContentEl)!.cropperRef;\n \n resolve({\n isConfirm: true,\n data: await new Promise(cropperRef.getCropData.bind(cropperRef)),\n size: { width: cropperRef.cropW, height: cropperRef.cropH },\n });\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"图片裁切\",\n onClose: handleCancelClick,\n body: () => {\n return (\n <ImageCropperContent\n ref={((el: any) => (imageCropperContentEl.value = el)) as any}\n src={options.src}\n fixedBox={fixedBox}\n ratioOptions={ratioOptions}\n maxHeight={options.maxHeight}\n maxWidth={options.maxWidth}\n />\n );\n },\n footer: () => {\n return (\n <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确认\n </ElButton>\n </Fragment>\n );\n },\n });\n });\n}\n\n\n/**\n * 图片裁切\n */\nexport const MKImageCropper = ImageCropper;\n","import { DynamicFormItemType } from \"../../DynamicFormPanel\"\nimport { type ContentConfigType,type ContentBlockType } from \"./ContentConfig\"\nimport { ModuleType } from \"./ModuleDefine\"\nimport { Component, VNode,reactive } from \"vue\"\n\n\n/**\n * 页面编辑器\n */\nexport default class VisualPageEditor{\n\n _version:string\n _content: ContentConfigType|null\n _modules:ModuleType[];\n\n constructor(){\n this._version = \"1.0.0\"\n this._content = null;\n this._modules = [];\n }\n\n /**\n * 模块列表\n */\n get baseModuleList(){\n return this._modules.filter(itme=>itme.group == \"base\");\n }\n get businessModuleList(){\n return this._modules.filter(itme=>itme.group == \"business\");\n }\n get customModuleList(){\n return this._modules.filter(itme=>itme.group == \"custom\");\n }\n /**\n * 注册基础模块\n * @param name \n * @param title \n * @param component \n * @param options \n */\n registerBaseModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\n if(this._modules.find(m=>m.name == name)){\n throw new Error(`重复的模块【${title}】`);\n }\n this._modules.push({ name,title,group:\"base\",component,options });\n }\n\n /**\n * 注册业务模块\n * @param name \n * @param title \n * @param component \n * @param options \n */\n registerBusinessModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\n if(this._modules.find(m=>m.name == name)){\n throw new Error(`重复的模块【${title}】`);\n }\n this._modules.push({ name,title,group:\"business\",component,options });\n }\n\n /**\n * 注册自定义模块\n * @param name \n * @param title \n * @param component \n * @param options \n */\n registerCustomModule(name : string, title : string, component: Component|((props:unknown)=>VNode), options:DynamicFormItemType[]){\n if(this._modules.find(m=>m.name == name)){\n throw new Error(`重复的模块【${title}】`);\n }\n this._modules.push({ name,title,group:\"custom\",component,options });\n }\n /**\n * 查找\n * @param name \n */\n findModule(name:string):ModuleType|null|undefined{\n return this._modules.find(m=>m.name == name)\n }\n\n /**\n * 内容大小\n * @returns \n */\n size(){\n return this._content?.contents.length as number;\n }\n\n /**\n * 删除\n * @param index \n */\n remove(index:number){\n this._content?.contents.splice(index,1)\n }\n\n /**\n * 交换\n * @param index \n * @param exchangeIndex \n */\n exchange(index:number,exchangeIndex:number){\n const item = this._content?.contents.splice(index,1)\n this._content?.contents.splice(exchangeIndex,0,item![0])\n }\n\n /**\n * 设置内容\n * @param content \n */\n setContent(content:ContentConfigType){\n this._content = reactive(content);\n }\n\n /**\n * 获取内容\n * @returns \n */\n get(index:number):ContentBlockType {\n return this._content?.contents[index] as ContentBlockType;\n }\n /**\n * 获取内容\n * @returns \n */\n edit(index:number,data:object) {\n if(this._content?.contents[index]){\n this._content.contents[index].componentProps = data;\n console.log(this._content);\n }\n }\n /**\n * 获取内容\n * @returns \n */\n getContent():ContentConfigType {\n return this._content || {version:this._version ,contents:[]}\n }\n\n}\n","\n\nimport { type DynamicFormItemType } from \"./type\"\n\n\n/**\n * 创建默认表单数据\n * @param options \n */\nexport const createDefaultFormData = (options:DynamicFormItemType[]) : any=>{\n const data:any = {}; \n options.forEach(item=>{ data[item.name] = item.defaultValue })\n return data;\n}\n","import {defineComponent, resolveComponent, h, ref} from \"vue\"\nimport { ElForm, ElFormItem} from \"element-plus\";\nimport {type DynamicFormItemType} from \"./type\"\n\nexport default defineComponent({\n name: \"DynamicFormPanel\",\n props: {\n data: {type: Object},\n options: {type: Array<DynamicFormItemType>}\n },\n setup: (props, {emit}) => {\n\n // 编辑\n const dataRef = ref<any>(props.data);\n\n\n return () => {\n\n // 生成的表单项\n const formItems = props.options?.filter(item => {\n if (item.condition) {\n return item.condition(dataRef.value);\n }\n return true;\n }).map(item => {\n\n const component = typeof item.component == \"string\" ? resolveComponent(item.component) : item.component;\n\n let defaultSlot: any = () => [];\n\n // 特殊处理的组件\n if (item.component == \"el-radio-group\") {\n defaultSlot = () => item.props.data.map((dt: any) => {\n return h(resolveComponent(\"el-radio-button\"), {label: dt.label, value: dt.value})\n })\n }\n\n return h(ElFormItem, {\n label: item.title, prop: item.name,\n }, {\n default: () => {\n return [\n h(component, {\n ...item.props,\n \"modelValue\": dataRef.value[item.name],\n \"onUpdate:modelValue\": (v: any) => {\n dataRef.value[item.name] = v;\n }\n }, {default: defaultSlot})\n ]\n }\n })\n });\n\n return h(ElForm, {\n labelPosition: \"top\", model: props.data, labelWidth: \"auto\",\n style: {height: \"600px\", overflow: \"auto\", padding: \"10px\"}\n }, {\n default: () => {\n return formItems\n }\n })\n }\n }\n});\n","\nimport { h ,type Component,Fragment,reactive } from 'vue'\nimport { Dialoger } from '@maketribe/dm'\nimport { ElButton,ElForm,ElFormItem,ElCollapse,ElCollapseItem,ElInput } from \"element-plus\";\nimport DynamicFormPanel from \"./DynamicFormPanel\"\nimport { type DynamicFormItemType } from \"./type\"\nimport { createDefaultFormData } from \"./utils\"\n\n/**\n * 显示动态表单弹窗\n * @param title 标题\n * @param options 表单配置\n * @param data 表单数据\n * @returns \n */\nexport const showDynamicFormDialoger = async (title:string,options:DynamicFormItemType[],data:any) => {\n return new Promise(resolve => {\n\n // 是否是新增\n const isAdd = data == null;\n\n // 新增的话\n if(isAdd){ \n data = createDefaultFormData(options); \n }\n\n // 响应数据\n const reactiveData = reactive(data)\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve(data);\n };\n\n const dialogInstance = Dialoger.customRender({\n title: isAdd ? `添加${title}` : `编辑${title}`,\n class: \"mk-dynamic-form-editor-dialog\",\n width: \"700px\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return h(DynamicFormPanel,{ data,options })\n },\n footer: () => {\n return h(Fragment,{},[\n h(ElButton,{ onClick:()=>handleCancelClick() },{ default:()=>\"取消\" }),\n h(ElButton,{ type:\"primary\" , onClick:()=>handleConfirmClick() },{ default:()=>\"确定\" })\n ]) \n },\n });\n });\n}\n\n\n\n","\nimport { Fragment, ref, unref, resolveComponent, h, reactive } from 'vue'\nimport { Dialoger } from '@maketribe/dm'\nimport { ElButton, ElForm, ElFormItem, ElCollapse, ElCollapseItem, ElInput } from \"element-plus\";\nimport { ModuleType } from \"./ModuleDefine\"\nimport { showDynamicFormDialoger } from \"../../DynamicFormPanel\"\nimport { useVisualPageEditor } from \".\"\n\n/**\n * \n * @param data \n * @param props \n * @returns \n */\nexport const showEditPanel = async (moduleOptons: ModuleType, props: any) => {\n\n return await showDynamicFormDialoger(moduleOptons.title,moduleOptons.options,props)\n}\n\n/**\n * \n * @param data \n * @param props \n * @returns \n */\nexport const showModuleSelectPanel = async () => {\n return new Promise(resolve => {\n\n const { PageEditor } = useVisualPageEditor();\n\n const selectComponentOption = ref(null);\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve(selectComponentOption.value);\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"模块库\",\n class: \"mk-html-editor-dialog\",\n width: \"70%\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return <div>\n <ElInput />\n <ElCollapse>\n <ElCollapseItem title=\"基础模块\" name=\"base\">\n\n </ElCollapseItem>\n <ElCollapseItem title=\"业务模块\" name=\"business\">\n\n </ElCollapseItem>\n <ElCollapseItem title=\"自定义模块\" name=\"custom\">\n\n </ElCollapseItem>\n </ElCollapse>\n </div>\n },\n footer: () => {\n return <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确定\n </ElButton>\n </Fragment>\n },\n });\n });\n}\n","\nimport { shallowReactive,ref } from \"vue\"\n\nimport VisualPageEditor from \"./VisvalPageEditor\"\n\n// 页面编辑器\nconst PageEditor = shallowReactive<VisualPageEditor>(new VisualPageEditor())\n\n// pc | mobile\nconst ViewDevice = ref('pc')\n\n\nexport * from \"./Dialog\"\n\n/**\n * \n * @returns \n */\nexport const useVisualPageEditor = ()=>{\n return { PageEditor, ViewDevice }\n}\n\n","<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue'\nimport { useVisualPageEditor } from \"./core\"\nconst { ViewDevice } = useVisualPageEditor();\nconst toolbarRef = ref<HTMLDivElement | null>(null)\n\nonMounted(() => {\n \n})\n\n\n</script>\n\n<template>\n <div ref=\"toolbarRef\" class=\"mk-visual-page-editor-toolbar\">\n <el-button-group>\n <el-button text :class=\"`${ViewDevice=='pc' ? 'active' : ''}`\" @click=\"ViewDevice='pc'\">\n <MKSvgIcon iconClass=\"Platform\" /> \n </el-button>\n <el-button text :class=\"`${ViewDevice=='mobile' ? 'active' : ''}`\" @click=\"ViewDevice='mobile'\">\n <MKSvgIcon iconClass=\"Iphone\" /> \n </el-button>\n </el-button-group>\n </div>\n</template>\n","import { defineComponent,h } from \"vue\"\nimport { ContentBlockType } from \"./ContentConfig\"\nimport { useVisualPageEditor } from \".\"\n\nexport default defineComponent({\n name:\"BlockRender\",\n emits:[\"click\"],\n props:{\n node:{type:Object},\n parent:{type:Object},\n index:{type:Number},\n active:{type:Boolean}\n },\n setup:(props,{ emit })=>{\n\n const { PageEditor } = useVisualPageEditor();\n\n return ()=>{\n\n const content = props.node as ContentBlockType;\n const module = PageEditor.findModule(content.componentInfo);\n\n if(module != null){\n\n const vnode = typeof module.component === \"function\" ? (module.component as any)(content.componentProps) : h(module.component,content.componentProps);\n\n return h(\"div\",{class:\"mk-visual-page-editor__stage_block\"},[\n vnode,\n h(\"div\",{ \n class:{\"mk-visual-page-editor__stage_block_mask\":true,active:props.active},\n onClick:ev=>{\n emit(\"click\",{ node:content,options:module,index:props.index,parent:props.parent,event:ev })\n }\n })\n ])\n }\n else{\n return h(\"div\",{class:\"mk-visual-page-editor__stage_block\"},[\n `未知的模块【${content.componentInfo}】!请注册!`\n ])\n }\n\n \n }\n }\n});\n","<template>\n <div class=\"mk-visual-page-editor__stage_body\" @click=\"clickStageHandle\">\n <div class=\"mk-visual-page-editor__stage_editable\" :style=\"{ width: (ViewDevice == 'pc' ? '900px' : '640px') }\"\n ref=\"editableRef\">\n <BlockRender v-for=\"(item, index) in PageEditor.getContent().contents\" :key=\"index\" :index=\"index\" :node=\"item\"\n :active=\"selectIndex == index\" @click=\"clickHandle\"></BlockRender>\n <div class=\"mk-visual-page-editor__stage_editable_addblock\">\n <el-button text type=\"primary\" size=\"large\" @click=\"addHandle()\">\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right:10px\" />\n 添加\n </el-button>\n </div>\n <div class=\"mk-visual-page-editor-inline-toolbar\" @click..stop :style=\"toolsPos\" v-if=\"selectIndex != null\">\n <el-button-group>\n <el-button text v-if=\"selectIndex > 0\" @click=\"PageEditor.exchange(selectIndex, selectIndex - 1); selectIndex--\">\n <MKSvgIcon iconClass=\"CaretTop\" style=\"margin-right:10px\" />\n 上移\n </el-button>\n <el-button text @click=\"PageEditor.exchange(selectIndex, selectIndex + 1); selectIndex++\"\n v-if=\"selectIndex < PageEditor.size() - 1\">\n <MKSvgIcon iconClass=\"CaretBottom\" style=\"margin-right:10px\" />\n 下移\n </el-button>\n <el-button text @click=\"addHandle(selectIndex, selectIndex - 1)\">\n <MKSvgIcon iconClass=\"Fold\" style=\"margin-right:10px\" />\n 插入\n </el-button>\n <el-button text @click=\"addHandle(selectIndex, selectIndex + 1)\">\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right:10px\" />\n 添加\n </el-button>\n <el-button text @click=\"editHandle(selectIndex)\">\n <MKSvgIcon iconClass=\"Edit\" style=\"margin-right:10px\" />\n 编辑\n </el-button>\n <el-button text type=\"danger\" @click=\"PageEditor.remove(selectIndex); selectIndex = null\">\n <MKSvgIcon iconClass=\"Delete\" style=\"margin-right:10px\" />\n 删除\n </el-button>\n </el-button-group>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onMounted, onBeforeUnmount, reactive } from \"vue\"\nimport { useVisualPageEditor, showEditPanel, showModuleSelectPanel } from \"./core\"\nimport BlockRender from \"./core/BlockRender\"\nimport { ModuleType } from \"./core/ModuleDefine\";\n\nconst { PageEditor, ViewDevice } = useVisualPageEditor();\nconst editableRef = ref<HTMLDivElement | null>(null);\nconst selectIndex = ref(null);\n\n// 点击块\nconst clickHandle = (data: any) => {\n data.event.stopPropagation();\n updateToolsPos();\n selectIndex.value = data.index;\n}\nconst clickStageHandle = () => {\n selectIndex.value = null;\n}\n// 工具条位置\nconst toolsPos = reactive({ top: \"0px\" });\n// 更新工具条位置\nconst updateToolsPos = () => {\n if (editableRef.value != null) {\n toolsPos.top = Math.max(editableRef.value.parentElement!.scrollTop + editableRef.value.parentElement!.offsetHeight / 2 - 100, 5) + \"px\"\n }\n}\n\n// 编辑\nconst addHandle = async (pos?: any, index?: any) => {\n\n const result = await showModuleSelectPanel();\n\n}\n\n// 编辑\nconst editHandle = async (index: any) => {\n\n const item = PageEditor.get(index)\n const module = PageEditor.findModule(item.componentInfo)\n const result = await showEditPanel(module as ModuleType, { ...item.componentProps });\n PageEditor.edit(index, result as any);\n}\n\nonMounted(() => {\n editableRef.value?.parentElement!.addEventListener(\"scroll\", updateToolsPos, false);\n onBeforeUnmount(() => {\n editableRef.value?.parentElement!.removeEventListener(\"scroll\", updateToolsPos);\n });\n\n PageEditor.setContent({\n version: \"1.0.0\",\n contents: [\n { componentInfo: \"base-image\", componentProps: { src: \"https://vgcnminisite.oss-cn-shanghai.aliyuncs.com/uploads/2024/07/03/ffd6b7c7f24f42dab3ae1220e18c3723.jpg\", id: 1 } },\n { componentInfo: \"base-image\", componentProps: { src: \"https://vgcnminisite.oss-cn-shanghai.aliyuncs.com/uploads/2024/07/03/b9e0baefbd784d70a83e04bea7cd6113.jpg\", id: 2 } }\n ]\n })\n\n});\n</script>\n./core/ModuleDefine./core/BlockRender\n./core/Dialog\n","<template>\n <div class=\"mk-visual-page-editor\">\n <slot name=\"toolbar\">\n <Toolbar />\n </slot>\n <div class=\"mk-visual-page-editor__stage\"> \n <ContentEditable></ContentEditable> \n <div class=\"mk-visual-page-editor__stage_right\">\n <slot name=\"extra-panel\"></slot>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted } from \"vue\"\nimport Toolbar from \"./toolbar.vue\"\nimport ContentEditable from \"./content-editable.vue\";\nimport { useVisualPageEditor } from \"./core\"\n\nconst { ViewDevice } = useVisualPageEditor();\n\nconst props = defineProps({ device:{type:String,default:\"mobile\"} })\n\n\nonMounted(()=>{\n\n ViewDevice.value = props.device;\n\n});\n</script>\n<style lang=\"scss\" scoped>\n@import \"index\";\n</style>\n","\n\nimport { h } from \"vue\"\nimport { useVisualPageEditor } from \"../core\"\n\nconst { PageEditor } = useVisualPageEditor();\n\n/**\n * 注册基础图片模块\n */\nPageEditor.registerBaseModule(\"base-image\", \"图片\", (data:any)=>{\n return h(\"img\", { src:data.src, style: { width: \"100%\" } })\n},[\n { name:\"src\", title:\"图片路径 :\", component:\"MKUploadImage\", props:{ cutSize:\"818*597\" }, defaultValue:\"\" }\n])\n","import { withInstall } from \"@maketribe/utils\";\nimport VisualPageEditor from \"./editor.vue\";\nimport \"./modules\"\n\nexport const MKVisualPageEditor = withInstall(VisualPageEditor);\n\nexport default MKVisualPageEditor;\n\n","window._iconfont_svg_string_1032790='<svg><symbol id=\"icon-doc-flex-right\" viewBox=\"0 0 1024 1024\"><path d=\"M926.25224691 70.13093706a27.61681602 27.61681602 0 0 0-27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 0 55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 0-27.61681603-27.61681603zM180.59820247 567.23363335a55.23363335 55.23363335 0 0 0-55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 0 55.23363335 55.23363206h552.33632965a55.23363335 55.23363335 0 0 0 55.23363206-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 0-55.23363206-55.23363206H180.59820247z m276.16816418-331.40179753a55.23363335 55.23363335 0 0 0-55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 0 55.23363206 55.23363206h276.16816547a55.23363335 55.23363335 0 0 0 55.23363206-55.23363206V291.06546788a55.23363335 55.23363335 0 0 0-55.23363206-55.23363206h-276.16816547z\" ></path></symbol><symbol id=\"icon-doc-flex-h-center\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 512a27.61681602 27.61681602 0 0 1-27.61681603 27.61681602H788.16816418v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206v-110.46726671h-110.4672667V788.16816418a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335H291.06546788a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335v-248.55134816H97.74775309a27.61681602 27.61681602 0 1 1 0-55.23363204H235.83183582V235.83183582a55.23363335 55.23363335 0 0 1 55.23363206-55.23363335h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363335v248.55134816h110.4672667v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363206-55.23363206h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671h138.08408273a27.61681602 27.61681602 0 0 1 27.61681603 27.61681602z\" ></path></symbol><symbol id=\"icon-doc-flex-v-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M263.44865185 70.13093706a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681603-27.61681603z m497.1026963 0a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363206 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681603-27.61681603zM567.23363335 180.59820247a55.23363335 55.23363335 0 0 1 55.23363206 55.23363335v552.33632836a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335h-110.4672667a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335V235.83183582a55.23363335 55.23363335 0 0 1 55.23363206-55.23363335h110.4672667z\" ></path></symbol><symbol id=\"icon-doc-flex-bottom\" viewBox=\"0 0 1024 1024\"><path d=\"M960.15254694 898.63543088a27.61681602 27.61681602 0 0 0-27.61681733-27.61681731H104.03123579a27.61681602 27.61681602 0 1 0 0 55.23363334h828.50449382a27.61681602 27.61681602 0 0 0 27.61681733-27.61681603z m-497.10269629-745.65404445a55.23363335 55.23363335 0 0 0-55.23363337-55.23363334h-110.4672654a55.23363335 55.23363335 0 0 0-55.23363336 55.23363334v552.33632836a55.23363335 55.23363335 0 0 0 55.23363336 55.23363336h110.4672654a55.23363335 55.23363335 0 0 0 55.23363337-55.23363336v-552.33632836z m331.40179752 276.16816418a55.23363335 55.23363335 0 0 0-55.23363335-55.23363334h-110.46726542a55.23363335 55.23363335 0 0 0-55.23363334 55.23363334v276.16816418a55.23363335 55.23363335 0 0 0 55.23363334 55.23363336h110.46726542a55.23363335 55.23363335 0 0 0 55.23363335-55.23363336v-276.16816418z\" ></path></symbol><symbol id=\"icon-doc-flex-h-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 263.44865185a27.61681602 27.61681602 0 0 1-27.61681603 27.61681603h-828.50449382a27.61681602 27.61681602 0 0 1 0-55.23363206h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603z m0 497.1026963a27.61681602 27.61681602 0 0 1-27.61681603 27.61681603h-828.50449382a27.61681602 27.61681602 0 1 1 0-55.23363206h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681603zM843.40179753 567.23363335a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206H235.83183582a55.23363335 55.23363335 0 0 1-55.23363335-55.23363206v-110.4672667a55.23363335 55.23363335 0 0 1 55.23363335-55.23363206h552.33632836a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.4672667z\" ></path></symbol><symbol id=\"icon-doc-flex-v-center\" viewBox=\"0 0 1024 1024\"><path d=\"M512 70.13093706a27.61681602 27.61681602 0 0 1 27.61681602 27.61681603V235.83183582h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206h-110.46726671v110.4672667H788.16816418a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206h-248.55134816v138.08408273a27.61681602 27.61681602 0 1 1-55.23363204 0V788.16816418H235.83183582a55.23363335 55.23363335 0 0 1-55.23363335-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363335-55.23363206h248.55134816v-110.4672667h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206V291.06546788a55.23363335 55.23363335 0 0 1 55.23363206-55.23363206h110.46726671V97.74775309A27.61681602 27.61681602 0 0 1 512 70.13093706z\" ></path></symbol><symbol id=\"icon-doc-flex-top\" viewBox=\"0 0 1024 1024\"><path d=\"M953.86906294 152.98138643a27.61681602 27.61681602 0 0 1-27.61681603 27.61681604h-828.50449382a27.61681602 27.61681602 0 0 1 0-55.23363335h828.50449382a27.61681602 27.61681602 0 0 1 27.61681603 27.61681731zM456.76636665 898.63543088a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206H291.06546788a55.23363335 55.23363335 0 0 1-55.23363206-55.23363206V346.29910124a55.23363335 55.23363335 0 0 1 55.23363206-55.23363336h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363336v552.33632964z m331.40179753-276.16816547a55.23363335 55.23363335 0 0 1-55.23363206 55.23363335h-110.46726671a55.23363335 55.23363335 0 0 1-55.23363206-55.23363335V346.29910124a55.23363335 55.23363335 0 0 1 55.23363206-55.23363336h110.46726671a55.23363335 55.23363335 0 0 1 55.23363206 55.23363336v276.16816417z\" ></path></symbol><symbol id=\"icon-doc-flex-left\" viewBox=\"0 0 1024 1024\"><path d=\"M152.98138643 70.13093706a27.61681602 27.61681602 0 0 1 27.61681604 27.61681603v828.50449382a27.61681602 27.61681602 0 1 1-55.23363335 0v-828.50449382a27.61681602 27.61681602 0 0 1 27.61681731-27.61681603zM898.63543088 567.23363335a55.23363335 55.23363335 0 0 1 55.23363206 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363206 55.23363206H346.29910124a55.23363335 55.23363335 0 0 1-55.23363336-55.23363206v-110.46726671a55.23363335 55.23363335 0 0 1 55.23363336-55.23363206h552.33632964z m-276.16816547-331.40179753a55.23363335 55.23363335 0 0 1 55.23363335 55.23363206v110.46726671a55.23363335 55.23363335 0 0 1-55.23363335 55.23363206H346.29910124a55.23363335 55.23363335 0 0 1-55.23363336-55.23363206V291.06546788a55.23363335 55.23363335 0 0 1 55.23363336-55.23363206h276.16816417z\" ></path></symbol><symbol id=\"icon-doc-bold\" viewBox=\"0 0 1024 1024\"><path d=\"M226.65787417 129.49114628h338.35346805c62.40969008 0 112.45653965 15.70274924 150.16643951 47.09530231 37.69695447 31.40549847 56.55837709 78.85032613 56.55837709 142.36037373 0 38.53840435-8.62162489 71.54913027-25.83898391 99.00628702-17.23030439 27.4830475-41.77475003 48.70052978-73.6203915 63.69128297v2.13598814c42.90099831 10.00678083 75.40685431 32.29872987 97.50462262 66.90173787 22.0977683 34.61595339 33.15312514 77.9700401 33.15312514 130.04931477 0 29.96856098-4.88040928 57.98236918-14.62828248 84.02847922-9.74787318 26.05905541-25.03637017 48.53223981-45.82665482 67.43249856-20.81617541 18.91320415-47.45777303 33.90395733-79.95068365 44.95931417-32.51880139 11.06830222-71.18665955 16.59598064-116.02946528 16.59598065H226.65787417V129.49114628z m121.88077828 320.03575151h198.9187508c29.25656494 0 53.63272059-9.10060405 73.12846697-27.28886676 19.49574637-18.2012081 29.25656494-44.4156081 29.25656495-78.66909078 0-38.53840435-8.77696948-65.64603575-26.33090845-81.34878499-17.55393897-15.68980385-42.90099831-23.54765117-76.05412347-23.54765116H348.53865245V449.52689779z m0 335.02650469h215.48884069c37.04968533 0 65.81432573-10.52459615 86.29392117-31.57378845 20.47959547-21.03624691 30.71939318-50.83651792 30.71939319-89.37492227 0-37.81346291-10.23979773-66.90173787-30.71939319-87.23893412s-49.24423585-30.49932169-86.29392117-30.49932169H348.53865245V784.55340248z\" ></path></symbol><symbol id=\"icon-doc-italic\" viewBox=\"0 0 1024 1024\"><path d=\"M630.50203339 163.97764584l-125.66083003 691.19281935H395.7504632l125.66083004-691.19281935h109.09074015z\" ></path><path d=\"M768.30563239 255.72157315H350.26038835l17.9681912-98.85094242h418.04524406l-17.96819122 98.85094242zM659.16311072 855.99896969H241.11786667l17.9681912-98.83799704h418.04524405l-17.9681912 98.83799704z\" ></path></symbol><symbol id=\"icon-doc-underline\" viewBox=\"0 0 1024 1024\"><path d=\"M246.47725511 122.37118579h113.59573334V500.40225186c0 21.81296987 1.048576 43.93662894 3.18456414 66.33214103 2.11009739 22.42140286 8.18148187 42.56441837 18.17531733 60.42904653 9.99383547 17.87757353 25.12698785 32.57058291 45.43829333 44.06608275 20.28541472 11.52139061 48.92060128 17.26914053 85.87966894 17.26914056 36.94612227 0 65.56836347-5.74774992 85.87966895-17.26914056 20.28541472-11.49549985 35.44445787-26.20145461 45.43829333-44.06608275 9.99383547-17.86462815 16.03932918-38.00764365 18.17531734-60.42904653 2.11009739-22.40845748 3.18456415-44.53211653 3.18456414-66.33214103V122.37118579h113.59573333v415.28787752c0 41.8006408-6.35618291 78.15127547-19.08149411 109.051904-12.7253112 30.90062853-30.75822933 56.79139397-54.07286362 77.69818706-23.32757965 20.90679309-51.34138785 36.50597925-84.05436997 46.79755852-32.71298213 10.29157925-69.0636168 15.44384158-109.051904 15.44384159-39.9882872 0-76.3259765-5.15226231-109.051904-15.44384159-32.71298213-10.29157925-60.7397357-25.90371082-84.05436997-46.79755852-23.32757965-20.90679309-41.34755239-46.79755852-54.07286361-77.69818706-12.7253112-30.90062853-19.08149413-67.2512632-19.08149413-109.051904v-415.28787752zM205.03908503 840.45156504h608.6271684v61.29638716H205.03908503z\" ></path></symbol><symbol id=\"icon-doc-strikethrough\" viewBox=\"0 0 1024 1024\"><path d=\"M206.33362331 135.49846125v116.88386054h244.64184256v247.6063352h135.31808554V252.38232179H832.00986075V135.49846125zM450.97546587 608.50980031h135.30514016V893.70952692H450.97546587z\" ></path><path d=\"M207.11034627 532.37800454h625.3267121v44.01430125H207.11034627z\" ></path></symbol><symbol id=\"icon-doc-sub\" viewBox=\"0 0 1024 1024\"><path d=\"M670.61977442 693.84576318c9.30773017 0 18.35655269-0.77672297 27.14646755-2.3301689 8.78991486-1.55344592 16.73837985-4.12957709 23.84539497-7.75428424 7.10701511-3.61176178 13.19134498-8.27209955 18.22709887-13.95512256 5.03575387-5.68302302 8.33682647-12.6605843 9.89027238-20.94562925h36.06583626v271.45173017h-48.48045828V728.74651498h-66.69461175v-34.9007518zM94.7444243 135.49846125v116.88386054h244.65478795v247.6063352h135.30514014V252.38232179h245.72925472V135.49846125z\" ></path><path d=\"M339.39921225 483.31500406h135.30514014V893.70952692H339.39921225z\" ></path></symbol><symbol id=\"icon-doc-sup\" viewBox=\"0 0 1024 1024\"><path d=\"M819.12661586 141.34230029c9.92824551 0 19.58032287-0.8285045 28.95623205-2.48551347 9.37590918-1.65700898 17.85427184-4.40488223 25.43508797-8.27123654 7.58081612-3.8525459 14.07076798-8.82357285 19.44223879-14.88546407 5.37147079-6.06189122 8.8926149-13.50462325 10.54962389-22.34200451h38.47022532v289.54851218h-51.71248881V178.56976887h-71.14091921v-37.22746858zM91.53396939 141.42515074v124.67611792h260.96510714v264.11342423h144.32548282V266.10126866h262.11120503v-124.67611792z\" ></path><path d=\"M352.49907653 512.42946308h144.32548282v437.75415773H352.49907653z\" ></path></symbol><symbol id=\"icon-doc-link\" viewBox=\"0 0 1024 1024\"><path d=\"M412.55356997 639.61821237l-12.84181966-12.84181966c-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809483l58.47429374-58.47429372c103.70546094-103.70546094 272.43557925-103.70546094 376.12809481 0 50.22808494 50.24103031 77.90531318 117.02625975 77.90531319 188.0705201 0 71.04426035-27.66428286 137.82948978-77.90531319 188.07052011l-58.47429372 58.47429372-78.3454562-78.34545621 58.47429373-58.47429372c29.30834647-29.30834647 45.45123872-68.27394845 45.45123872-109.7250639s-16.14289225-80.41671743-45.45123872-109.72506389c-60.49377343-60.49377343-158.94340898-60.49377343-219.43718242 0l-58.47429373 58.47429372c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718242l12.84181965 12.82887427-78.3454562 78.35840159z\" ></path><path d=\"M347.98200098 913.6460737c-71.04426035 0-137.82948978-27.66428286-188.07052009-77.90531319-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809481l58.47429372-58.47429374 78.34545621 78.3454562-58.47429373 58.47429372c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718243 29.30834647 29.30834647 68.27394845 45.45123872 109.72506389 45.45123872s80.41671743-16.14289225 109.72506391-45.45123872l58.47429372-58.47429373c60.49377343-60.49377343 60.49377343-158.94340898 0-219.43718242l-12.64763891-12.63469353 78.3454562-78.3454562 12.64763892 12.64763892c103.70546094 103.69251555 103.70546094 272.43557925 0 376.12809481L536.05252109 835.74076051c-50.24103031 50.24103031-117.02625975 77.90531318-188.07052011 77.90531319z\" ></path></symbol><symbol id=\"icon-doc-unlink\" viewBox=\"0 0 1024 1024\"><path d=\"M714.18098725 714.01335467l128.0039443 128.0039443-28.56787057 28.56916512-128.00523885-128.00523884zM657.3701752 775.98937442l46.84934005 174.85457888-39.02385619 10.45728016-46.84934004-174.85587342zM756.63536987 648.12782934l174.85587343 46.84934005-10.45598561 39.02515073-174.85587342-46.84934004zM245.52318041 302.52235789l-128.00523884-128.00394429 28.56916512-28.57045966 128.0039443 128.00653337zM201.64739476 369.81634086L26.79411042 322.96570628l10.45598561-39.02515074 174.8545789 46.84934005zM300.93071297 241.95479577l-46.85063459-174.85587342 39.02515074-10.45598562 46.84934004 174.85457889z\" ></path><path d=\"M712.47219675 651.79784534l-78.34545622-78.3454562 78.06065778-78.06065778c29.30834647-29.30834647 45.45123872-68.27394845 45.45123872-109.72506389s-16.14289225-80.41671743-45.45123872-109.72506391c-29.30834647-29.30834647-68.27394845-45.45123872-109.72506389-45.45123872s-80.41671743 16.14289225-109.7250639 45.45123872l-78.06065777 78.06065778-78.34545622-78.3454562 78.06065778-78.06065778c103.70546094-103.70546094 272.43557925-103.70546094 376.12809483 0 50.22808494 50.22808494 77.90531318 117.02625975 77.90531317 188.07052011s-27.66428286 137.82948978-77.90531317 188.07052009l-78.04771239 78.06065778z\" ></path><path d=\"M354.6359277 897.12579319c-68.11860385 0-136.21131694-25.91665619-188.07052009-77.77585935-103.70546094-103.70546094-103.70546094-272.43557925 0-376.12809482l78.06065778-78.06065778 78.34545619 78.34545619-78.06065777 78.06065777c-60.49377343 60.49377343-60.49377343 158.94340898 0 219.43718244 60.49377343 60.49377343 158.94340898 60.49377343 219.43718241 0l78.06065778-78.06065779 78.34545619 78.34545621-78.06065777 78.06065778c-51.83331239 51.84625778-119.96486163 77.77585936-188.05757472 77.77585935z\" ></path></symbol><symbol id=\"icon-doc-text-left\" viewBox=\"0 0 1024 1024\"><path d=\"M93.96770133 166.81136987h843.06804939v129.69978944H93.96770133zM93.96770133 449.79743605H625.01319111v129.69978943H93.96770133zM93.96770133 732.78350222h843.06804939v129.69978943H93.96770133z\" ></path></symbol><symbol id=\"icon-doc-text-right\" viewBox=\"0 0 1024 1024\"><path d=\"M97.45000928 166.81136987h843.06804939v129.69978944H97.45000928zM409.47256889 449.79743605h531.04548978v129.69978943H409.47256889zM97.45000928 732.78350222h843.06804939v129.69978943H97.45000928z\" ></path></symbol><symbol id=\"icon-doc-text-center\" viewBox=\"0 0 1024 1024\"><path d=\"M93.56639447 129.78757531h843.06804938v129.69978944H93.56639447zM249.57120158 412.77364148H780.61669136v129.69978943H249.57120158zM93.56639447 695.75970765h843.06804938v129.69978944H93.56639447z\" ></path></symbol><symbol id=\"icon-doc-text-justify\" viewBox=\"0 0 1024 1024\"><path d=\"M92.40131003 464.12797472h843.06804938v129.69978943H92.40131003zM92.40131003 181.14190853h843.06804938v129.69978944H92.40131003zM92.40131003 747.11404089h531.04548978v129.69978942H92.40131003z\" ></path></symbol><symbol id=\"icon-doc-h1\" viewBox=\"0 0 1024 1024\"><path d=\"M781.4063597 654.73578983c9.96794469 0 19.66403635-0.8285045 29.08827497-2.49845886 9.41129324-1.65700898 17.92935506-4.42732089 25.55418548-8.31093572 7.61188503-3.87066943 14.12341253-8.86758717 19.53458252-14.95191703 5.39822459-6.08432987 8.93231408-13.56676109 10.58932306-22.43434825h38.64196741V897.38404347h-51.93687545V692.1350005h-71.47145799v-37.39921067zM121.7096565 447.86857403h531.04548977v129.69978944H121.7096565z\" ></path><path d=\"M589.78880475 897.40475607v-769.36998558h129.69978942v769.36998558zM121.71871826 897.40216699v-769.36998557h129.69978944v769.36998557z\" ></path></symbol><symbol id=\"icon-doc-h2\" viewBox=\"0 0 1024 1024\"><path d=\"M942.38219378 897.38404347H743.78707753c0.27185303-24.10430261 6.08432987-45.14054953 17.4503759-63.16052229 11.35310064-18.00702736 26.86166914-33.65799506 46.53865087-46.9529031 9.41129324-6.92577975 19.2497841-13.64443339 29.5025272-20.1559609 10.23979773-6.5115275 19.66403635-13.50203417 28.25977047-20.98446537 8.58278875-7.4824312 15.6509677-15.5862408 21.19159151-24.31142875 5.54062381-8.72518795 8.44038953-18.75785955 8.72518795-30.12390558 0-5.25582539-0.62137837-10.87412148-1.86413512-16.82899753s-3.67648869-11.49549985-7.27530507-16.62187142c-3.59881639-5.12637155-8.58278875-9.41129324-14.95191705-12.88065578-6.3691283-3.45641718-14.680064-5.19109847-24.9328071-5.19109848-9.42423861 0-17.24324978 1.86413511-23.46997887 5.60535071s-11.22364682 8.86758717-14.95191704 15.37911467c-3.74121561 6.5115275-6.5115275 14.20108483-8.3109357 23.05572662-1.79940819 8.86758717-2.84798419 18.42127961-3.11983723 28.67402271h-47.36715536c0-16.06521995 2.14893353-30.95241008 6.44680059-44.66157037 4.28492169-13.7091603 10.73172227-25.55418548 19.31451102-35.52213016 8.58278875-9.96794469 19.04265797-17.79990124 31.36666232-23.46997887 12.32400435-5.67007763 26.65454302-8.51806183 43.00456137-8.51806183 17.72222894 0 32.54469215 2.91271111 44.45444426 8.72518795 11.9097521 5.81247683 21.52817147 13.16545422 28.88114883 22.020096 7.340032 8.86758717 12.53113047 18.48600652 15.5862408 28.88114883 3.04216494 10.38219694 4.5697201 20.2983601 4.56972009 29.70965334 0 11.63789906-1.79940819 22.1624952-5.39822459 31.57378844a101.82838045 101.82838045 0 0 1-14.53766478 25.96843774c-6.09727525 7.89668347-13.02305502 15.15904317-20.77733927 21.81296987-7.75428425 6.65392672-15.79336691 12.88065581-24.10430262 18.69313265-8.3109357 5.81247683-16.62187141 11.36604603-24.9328071 16.6218714-8.3109357 5.26877076-16.00049303 10.52459615-23.05572663 15.79336692-7.06817897 5.26877076-13.23018114 10.73172227-18.48600651 16.41474528-5.26877076 5.68302302-8.86758717 11.70262597-10.79644919 18.07175428H942.43397531v42.38318302zM89.90285117 447.86857403h531.04548977v129.69978944H89.90285117z\" ></path><path d=\"M557.97293763 897.40993422V128.03994864h129.69978944v769.36998558zM89.90285117 897.40605061v-769.36998558h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h3\" viewBox=\"0 0 1024 1024\"><path d=\"M823.67303427 727.0357523c7.75428425 0.27185303 15.5085685-0.27185303 23.26285275-1.65700899 7.75428425-1.38515595 14.680064-3.80594252 20.77733925-7.27530509 6.08432987-3.45641718 11.00357531-8.23326341 14.74479091-14.33053867 3.74121561-6.08432987 5.60535072-13.56676109 5.60535072-22.43434824 0-12.46640355-4.22019476-22.43434825-12.67352968-29.91677946-8.45333491-7.4824312-19.31451102-11.22364682-32.62236444-11.22364682-8.3109357 0-15.52151387 1.65700898-21.60584375 4.98397236-6.09727525 3.32696336-11.1589199 7.83195653-15.15904317 13.50203416-4.01306864 5.68302302-7.00345205 12.05215131-8.93231406 19.1073849-1.94180741 7.06817897-2.7703119 14.33053867-2.49845888 21.81296986H747.21760395c0.55665147-14.12341253 3.18456415-27.21119447 7.89668346-39.26334578 4.71211931-12.05215131 11.14597452-22.49907517 19.31451101-31.36666231 8.1685365-8.86758717 18.07175427-15.79336691 29.70965333-20.77733925 11.63789906-4.98397235 24.7904079-7.4824312 39.4704719-7.48243122 11.35310064 0 22.49907517 1.65700898 33.45086894 4.98397235 10.93884839 3.32696336 20.77733925 8.1685365 29.50252722 14.53766479 8.72518795 6.3691283 15.71569461 14.47293787 20.98446537 24.31142874 5.25582539 9.83849086 7.89668347 21.12686459 7.89668346 33.86512119 0 14.680064-3.32696336 27.49599289-9.96794469 38.43484128-6.65392672 10.95179378-17.03612365 18.90025876-31.1595362 23.89717649v0.8285045c16.62187141 3.32696336 29.56725413 11.57317215 38.84909353 24.72568099 9.28183941 13.16545422 13.91628642 29.15300187 13.91628642 47.98853373 0 13.8515595-2.7703119 26.25323615-8.3109357 37.19208454-5.54062381 10.95179378-13.02305502 20.22068781-22.43434825 27.83257283-9.42423861 7.62483042-20.36308702 13.50203417-32.82949057 17.65750202-12.46640355 4.15546785-25.61891239 6.22672909-39.4704719 6.2267291-16.89372445 0-31.65146075-2.43373195-44.24731811-7.2753051-12.60880276-4.84157314-23.13339891-11.70262597-31.57378845-20.57021312-8.45333491-8.86758717-14.88719013-19.52163714-19.31451102-31.98804069-4.44026627-12.46640355-6.79632592-26.31796306-7.06817895-41.55467853h47.36715535c-0.55665147 17.73517431 3.80594252 32.47996524 13.08778193 44.24731812 9.28183941 11.78029827 23.19812583 17.65750203 41.76180464 17.65750204 15.79336691 0 29.01060267-4.50499318 39.67759802-13.50203419 10.65404997-8.99704098 16.00049303-21.81296987 16.00049304-38.43484128 0-11.35310064-2.22660583-20.36308702-6.65392671-27.00406835-4.42732089-6.65392672-10.25274311-11.70262597-17.45037591-15.15904315-7.21057817-3.45641718-15.31438775-5.60535072-24.31142874-6.44680058-9.00998637-0.8285045-18.21415348-1.10035753-27.62544672-0.8285045v-35.30205867zM91.27506173 447.86857403h531.04548977v129.69978944H91.27506173z\" ></path><path d=\"M559.34126459 897.40605061v-769.36998558h129.69978944v769.36998558zM91.27247265 897.40346153v-769.36998558h129.69978943v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h4\" viewBox=\"0 0 1024 1024\"><path d=\"M942.30452148 828.41104435h-37.39921066v68.97299912h-44.86869651v-68.97299912h-124.65109016v-46.95290311l124.65109016-174.91801127h44.86869651v184.48464909h37.39921066v37.38626529z m-170.36123654-37.38626529h88.080384v-127.97805353h-0.82850449l-87.25187951 127.97805353zM87.75391763 447.86857403H618.79940741v129.69978944H87.75391763z\" ></path><path d=\"M555.82659318 897.39957792v-769.36998558h129.69978943v769.36998558zM87.75780125 897.39698883V128.02700325h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-h5\" viewBox=\"0 0 1024 1024\"><path d=\"M772.55171792 661.63567882h150.41240178v42.38318301h-115.09739773L792.91480494 777.97583328l0.82850449 0.8285045c6.3691283-7.1976328 14.47293787-12.67352969 24.31142874-16.41474528 9.82554548-3.74121561 19.59930943-5.60535072 29.29540108-5.60535072 14.39526558 0 27.27592139 2.43373195 38.64196742 7.27530508 11.35310064 4.85451852 20.90679309 11.63789906 28.67402272 20.36308701 7.75428425 8.72518795 13.64443339 19.04265797 17.65750202 30.95241008 4.01306864 11.9097521 6.01960297 24.7904079 6.01960296 38.64196741 0 11.63789906-1.86413511 23.61237808-5.60535072 35.93638242-3.74121561 12.32400435-9.69609165 23.54765117-17.86462815 33.65799505-8.1685365 10.1103439-18.62840573 18.42127961-31.36666232 24.93280712-12.73825659 6.49858213-27.97497205 9.76081857-45.71014636 9.76081857-14.12341253 0-27.21119447-1.86413511-39.26334579-5.60535071s-22.64147437-9.34656631-31.78091456-16.82899754c-9.13944019-7.4824312-16.41474528-16.68659831-21.81296988-27.62544672-5.39822459-10.93884839-8.37566261-23.7418319-8.93231407-38.43484128h47.36715535c1.38515595 15.79336691 6.78338053 27.91024514 16.20761916 36.35063467 9.41129324 8.45333491 21.8776968 12.67352969 37.39921067 12.67352967 9.96794469 0 18.42127961-1.65700898 25.34705936-4.98397234 6.92577975-3.32696336 12.53113047-7.89668347 16.82899753-13.7091603 4.29786706-5.81247683 7.340032-12.59585739 9.13944021-20.363087 1.79940819-7.75428425 2.70558498-16.06521995 2.70558498-24.93280712 0-8.02613728-1.11330291-15.71569461-3.32696336-23.05572661-2.22660583-7.340032-5.54062381-13.7738872-9.96794469-19.31451102-4.44026627-5.54062381-10.17507082-9.96794469-17.24324978-13.29490805s-15.31438775-4.98397235-24.72568098-4.98397234c-9.96794469 0-19.31451102 1.86413511-28.05264436 5.6053507s-15.02958933 10.73172227-18.90025876 20.98446539H741.39218173l31.15953619-159.1505351zM83.76673975 502.96412286h531.04548978v129.69978944H83.76673975z\" ></path><path d=\"M551.83941531 952.4964213v-769.36998559h129.69978944v769.36998559zM83.77062337 952.49253769V183.1225521h129.69978943v769.36998559z\" ></path></symbol><symbol id=\"icon-doc-h6\" viewBox=\"0 0 1024 1024\"><path d=\"M888.60707397 733.36604445c-1.11330291-11.9097521-5.33349769-21.52817147-12.67352967-28.88114884-7.340032-7.340032-17.24324978-11.01652069-29.70965333-11.0165207-8.59573413 0-16.00049303 1.59228208-22.22722214 4.77684623-6.22672909 3.18456415-11.49549985 7.4177043-15.79336691 12.67352968-4.29786706 5.26877076-7.75428425 11.28837373-10.38219694 18.07175427-2.64085808 6.79632592-4.77684622 13.91628642-6.4338552 21.39871763s-2.84798419 14.88719013-3.53408948 22.22722211c-0.69905067 7.340032-1.32042903 14.20108483-1.86413512 20.57021314l0.82850451 0.8285045c6.3691283-11.63789906 15.15904317-20.28541472 26.38268996-25.96843772 11.22364682-5.67007763 23.32757965-8.51806183 36.35063466-8.51806184 14.39526558 0 27.27592139 2.49845886 38.64196742 7.48243122 11.35310064 4.98397235 20.98446539 11.84502518 28.88114884 20.57021312 7.89668347 8.72518795 13.91628642 19.04265797 18.07175426 30.95241008 4.15546785 11.9097521 6.22672909 24.7904079 6.22672909 38.64196742 0 14.12341253-2.29133275 27.21119447-6.86105283 39.26334577-4.5697201 12.05215131-11.1589199 22.57674747-19.74170864 31.57378845-8.58278875 9.00998637-18.83553185 16.00049303-30.74528395 20.98446538-11.9097521 4.98397235-25.07520631 7.4824312-39.47047191 7.4824312-21.33399072 0-38.84909353-3.94834173-52.55825383-11.84502518s-24.51855486-18.69313264-32.41523831-32.41523832c-7.89668347-13.7091603-13.37258035-29.77438025-16.41474528-48.19565986-3.05511031-18.42127961-4.5697201-38.29244208-4.56972011-59.62643278 0-17.4503759 1.86413511-35.04315102 5.60535072-52.76537994 3.74121561-17.72222894 9.90321778-33.86512118 18.48600652-48.40278599 8.58278875-14.5376648 19.87116247-26.38268997 33.86512118-35.52213017 13.98101333-9.13944019 31.22426311-13.7091603 51.72974934-13.70916029 11.63789906 0 22.57674747 1.94180741 32.82949057 5.81247683 10.23979773 3.88361482 19.31451102 9.28183941 27.21119446 16.20761917s14.33053867 15.23671547 19.31451101 24.93280711c4.98397235 9.69609165 7.75428425 20.50548622 8.31093571 32.41523832h-47.3412646z m-45.69720099 183.65614458c8.58278875 0 16.06521995-1.7217359 22.43434826-5.19109846 6.3691283-3.45641718 11.70262597-7.96141037 16.00049303-13.50203418 4.28492169-5.54062381 7.4824312-11.97447902 9.55369245-19.32745639 2.07126124-7.340032 3.11983724-14.88719013 3.11983723-22.64147437 0-7.75428425-1.03563061-15.22377008-3.11983723-22.43434824-2.07126124-7.1976328-5.26877076-13.50203417-9.55369245-18.90025878-4.29786706-5.39822459-9.63136475-9.76081857-16.00049303-13.08778192-6.3691283-3.32696336-13.8515595-4.98397235-22.43434826-4.98397234-8.58278875 0-16.14289225 1.59228208-22.64147437 4.77684622-6.5115275 3.18456415-11.98742439 7.4824312-16.41474528 12.8806558-4.44026627 5.39822459-7.75428425 11.70262597-9.96794469 18.90025877-2.21366045 7.21057817-3.32696336 14.8224632-3.32696336 22.84860049 0 8.03908267 1.10035753 15.6509677 3.32696336 22.8486005 2.21366045 7.21057817 5.54062381 13.64443339 9.96794469 19.31451101 4.42732089 5.68302302 9.90321778 10.17507082 16.41474528 13.50203417 6.49858213 3.32696336 14.04574025 4.99691773 22.64147437 4.99691772zM86.82185008 501.15176928h531.04548977v129.69978944H86.82185008z\" ></path><path d=\"M554.89064202 950.68277317v-769.36998558h129.69978943v769.36998558zM86.82185008 950.69312948V181.3231439h129.69978942v769.36998558z\" ></path></symbol><symbol id=\"icon-doc-list-bullet\" viewBox=\"0 0 1024 1024\"><path d=\"M354.22167547 181.90568613h531.04548977V311.60547555H354.22167547zM354.22167547 464.8917523h531.04548977V594.59154173H354.22167547zM354.22167547 747.87781847h531.04548977V877.5776079H354.22167547z\" ></path><path d=\"M208.84502755 247.42226805m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path><path d=\"M208.84502755 529.7481197m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path><path d=\"M208.84502755 805.78251536m-64.84342202 0a64.84342203 64.84342203 0 1 0 129.68684405 0 64.84342203 64.84342203 0 1 0-129.68684405 0Z\" ></path></symbol><symbol id=\"icon-doc-list-number\" viewBox=\"0 0 1024 1024\"><path d=\"M154.11194943 180.33929482c7.37886815 0 14.56355555-0.62137837 21.54111684-1.85118973 6.97756128-1.22981136 13.28196267-3.27518183 18.92614954-6.14905679 5.64418686-2.87387497 10.45986924-6.56330903 14.45999249-11.08124761 4.00012325-4.50499318 6.61509057-10.04561698 7.84490192-16.62187141h28.62224119v215.39822302h-38.46073205V208.02946845h-52.92072454V180.33929482zM296.8995208 658.07569857H149.81408237c0.20712613-17.85168276 4.50499318-33.43792355 12.91949194-46.77166775 8.41449876-13.33374419 19.89705324-24.91986173 34.4606088-34.77129799 6.97756128-5.12637155 14.25286637-10.09739852 21.85180603-14.92602626 7.58599427-4.81568237 14.56355555-9.99383547 20.91973847-15.53445926s11.58611753-11.534336 15.68980386-17.99408198 6.25261985-13.89039565 6.45974596-22.30489442c0-3.89656019-0.46603378-8.05202805-1.38515595-12.46640355-0.91912217-4.4143755-2.71853037-8.50511645-5.38527921-12.31105897-2.66674883-3.79299714-6.35618291-6.97756128-11.0812476-9.54074706-4.72506469-2.56318578-10.87412148-3.84477867-18.46011576-3.84477866-6.97756128 0-12.76414736 1.38515595-17.38564899 4.15546785-4.60855625 2.7703119-8.3109357 6.56330903-11.08124761 11.39193679-2.7703119 4.81568237-4.82862775 10.51165076-6.14905678 17.0749598-1.33337442 6.56330903-2.11009739 13.64443339-2.30427812 21.23042765h-35.08198716c0-11.89680672 1.59228208-22.9262728 4.76390084-33.07545284s7.94846498-18.92614953 14.30464789-26.30501767c6.35618291-7.39181353 14.09752178-13.17839961 23.23696199-17.385649 9.12649482-4.20724939 19.74170864-6.30440139 31.84564148-6.30440138 13.12661808 0 24.10430261 2.14893353 32.92010824 6.45974598 8.81580563 4.31081245 15.9487115 9.74787318 21.38577225 16.31118223 5.43706075 6.56330903 9.28183941 13.69621491 11.534336 21.38577223 2.25249659 7.68955733 3.37874489 15.02958933 3.37874489 21.99420524 0 8.62162489-1.33337442 16.41474528-4.00012326 23.39230658a75.61656951 75.61656951 0 0 1-10.77055842 19.2368387 109.10109645 109.10109645 0 0 1-15.37911467 16.15583764c-5.74774992 4.91924543-11.68968059 9.54074706-17.85168276 13.8515595-6.1490568 4.31081245-12.31105897 8.41449876-18.46011575 12.31105897s-11.84502518 7.79312039-17.0749598 11.68968059c-5.22993461 3.89656019-9.79965472 7.94846498-13.69621492 12.15571437-3.89656019 4.20724939-6.56330903 8.67340642-8.00024652 13.38552573h104.92232691v31.35371694zM207.96474153 818.30070045c5.73480453 0.20712613 11.48255447-0.20712613 17.23030439-1.22981136 5.74774992-1.02268524 10.87412148-2.82209343 15.39206005-5.38527922 4.50499318-2.56318578 8.15559111-6.09727525 10.92590301-10.61521382 2.7703119-4.50499318 4.15546785-10.04561698 4.15546785-16.62187141 0-9.23005787-3.13278261-16.62187141-9.38540246-22.14954982-6.26556524-5.54062381-14.3046479-8.3109357-24.15608415-8.31093571-6.1490568 0-11.49549985 1.22981136-16.00049304 3.68943407-4.51793857 2.45962272-8.25915417 5.79953147-11.2365922 9.99383546-2.97743803 4.20724939-5.17815309 8.91936869-6.61509056 14.14930331-1.43693748 5.22993461-2.05831585 10.61521383-1.85118973 16.15583763h-35.08198716c0.41425225-10.45986924 2.35605965-20.15596089 5.85131299-29.07532958 3.48230795-8.91936869 8.25915417-16.66070755 14.3046479-23.23696197 6.04549373-6.56330903 13.38552573-11.68968059 21.99420523-15.37911467 8.62162489-3.68943408 18.35655269-5.54062381 29.23067418-5.54062381 8.41449876 0 16.66070755 1.22981136 24.76451714 3.68943408 8.10380958 2.45962272 15.37911467 6.05843911 21.85180601 10.77055842 6.45974597 4.72506469 11.63789906 10.71877689 15.53445927 17.99408198 3.89656019 7.28825047 5.85131298 15.6509677 5.85131299 25.07520632 0 10.87412148-2.45962272 20.36308702-7.39181354 28.46689659-4.91924543 8.10380958-12.62174815 14.0069041-23.08161739 17.69633817v0.62137837c12.31105897 2.45962272 21.89064217 8.56984336 28.77758579 18.30477116 6.87399822 9.74787318 10.30452464 21.59289837 10.30452465 35.53507555 0 10.2656885-2.05831585 19.44396483-6.1490568 27.53482905-4.10368631 8.10380958-9.64431013 14.97780781-16.62187142 20.62199466-6.97756128 5.64418686-15.08137086 10.00678083-24.31142872 13.07483655s-18.97793106 4.62150163-29.23067418 4.62150163c-12.51818509 0-23.4440881-1.79940819-32.76476366-5.38527922-9.33362094-3.58587102-17.12674133-8.66046103-23.39230656-15.23671545-6.26556524-6.56330903-11.02946608-14.4599925-14.30464791-23.69005038-3.2881272-9.23005787-5.0228085-19.48280098-5.22993461-30.77117472h35.08198716c-0.41425225 13.12661808 2.82209343 24.05252109 9.69609165 32.76476366 6.87399822 8.72518795 17.17852286 13.07483653 30.92651932 13.07483655 11.68968059 0 21.48933531-3.32696336 29.38601876-10.00678083 7.89668347-6.6668721 11.84502518-16.15583763 11.84502519-28.4668966 0-8.41449876-1.64406361-15.08137086-4.91924544-20.00061629-3.2881272-4.91924543-7.58599427-8.66046103-12.91949195-11.23659221-5.33349769-2.56318578-11.34015525-4.15546785-18.00702736-4.76390084-6.6668721-0.62137837-13.4890888-0.81555911-20.46665007-0.62137836v-26.11083694zM358.66194173 186.92849461h531.04548977v129.69978944H358.66194173zM358.66194173 497.61767981h531.04548977v129.69978943H358.66194173zM358.66194173 780.60374597h531.04548977v129.69978944H358.66194173z\" ></path></symbol></svg>',function(t){var h=(h=document.getElementsByTagName(\"script\"))[h.length-1],l=h.getAttribute(\"data-injectcss\"),h=h.getAttribute(\"data-disable-injectsvg\");if(!h){var a,o,i,c,e,v=function(h,l){l.parentNode.insertBefore(h,l)};if(l&&!t.__iconfont__svg__cssinject__){t.__iconfont__svg__cssinject__=!0;try{document.write(\"<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>\")}catch(h){console&&console.log(h)}}a=function(){var h,l=document.createElement(\"div\");l.innerHTML=t._iconfont_svg_string_1032790,(l=l.getElementsByTagName(\"svg\")[0])&&(l.setAttribute(\"aria-hidden\",\"true\"),l.style.position=\"absolute\",l.style.width=0,l.style.height=0,l.style.overflow=\"hidden\",l=l,(h=document.body).firstChild?v(l,h.firstChild):h.appendChild(l))},document.addEventListener?~[\"complete\",\"loaded\",\"interactive\"].indexOf(document.readyState)?setTimeout(a,0):(o=function(){document.removeEventListener(\"DOMContentLoaded\",o,!1),a()},document.addEventListener(\"DOMContentLoaded\",o,!1)):document.attachEvent&&(i=a,c=t.document,e=!1,s(),c.onreadystatechange=function(){\"complete\"==c.readyState&&(c.onreadystatechange=null,d())})}function d(){e||(e=!0,i())}function s(){try{c.documentElement.doScroll(\"left\")}catch(h){return void setTimeout(s,50)}d()}}(window);\n","import type { WatchOptionsBase } from 'vue'\nimport { watchEffect,onMounted, onUnmounted } from 'vue'\n\n/**\n * @internal\n */\nexport function useEffect(cb: () => (() => any) | undefined, options?: WatchOptionsBase) {\n watchEffect((onInvalidate) => {\n const unregister = cb()\n\n onInvalidate(() => unregister?.())\n }, {\n flush: 'post',\n ...options,\n })\n}\n\n\n/**\n * @internal\n */\nexport function useMounted(cb: () => undefined | (() => any)) {\n \n let unregister: (() => void) | undefined\n\n onMounted(() => {\n unregister = cb()\n })\n\n onUnmounted(() => {\n unregister?.()\n })\n}\n","import type { LexicalEditor, LexicalNode } from 'lexical'\n\nimport {\n $createOverflowNode,\n $isOverflowNode,\n OverflowNode,\n} from '@lexical/overflow'\nimport { $rootTextContent } from '@lexical/text'\nimport { $dfs, mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isLeafNode,\n $isRangeSelection,\n $isTextNode,\n $setSelection,\n} from 'lexical'\n\nimport { useMounted } from './utils'\n\ninterface OptionalProps {\n remainingCharacters?: (characters: number) => void\n strlen?: (input: string) => number\n}\n\nexport function useCharacterLimit(\n editor: LexicalEditor,\n maxCharacters: number,\n optional: OptionalProps = Object.freeze({}),\n) {\n const {\n strlen = input => input.length, // UTF-16\n remainingCharacters = (_characters) => {},\n } = optional\n\n useMounted(() => {\n\n if (!editor.hasNodes([OverflowNode])) {\n throw new Error('useCharacterLimit: OverflowNode not registered on editor')\n }\n\n let text = editor.getEditorState().read($rootTextContent)\n let lastComputedTextLength = 0\n\n return mergeRegister(\n editor.registerTextContentListener((currentText: string) => {\n text = currentText\n }),\n editor.registerUpdateListener(({ dirtyLeaves }) => {\n const isComposing = editor.isComposing()\n const hasDirtyLeaves = dirtyLeaves.size > 0\n if (isComposing || !hasDirtyLeaves)\n return\n\n const textLength = strlen(text)\n const textLengthAboveThreshold\n = textLength > maxCharacters\n || (lastComputedTextLength !== null\n && lastComputedTextLength > maxCharacters)\n const diff = maxCharacters - textLength\n remainingCharacters(diff)\n if (lastComputedTextLength === null || textLengthAboveThreshold) {\n const offset = findOffset(text, maxCharacters, strlen)\n editor.update(\n () => {\n $wrapOverflowedNodes(offset)\n },\n {\n tag: 'history-merge',\n },\n )\n }\n lastComputedTextLength = textLength\n }),\n )\n })\n}\n\nfunction findOffset( text: string, maxCharacters: number, strlen: (input: string) => number): number {\n\n const Segmenter = (Intl as any).Segmenter\n\n let offsetUtf16 = 0\n let offset = 0\n\n if (typeof Segmenter === 'function') {\n const segmenter = new Segmenter()\n const graphemes = segmenter.segment(text)\n\n for (const { segment: grapheme } of graphemes) {\n const nextOffset = offset + strlen(grapheme)\n\n if (nextOffset > maxCharacters)\n break\n\n offset = nextOffset\n offsetUtf16 += grapheme.length\n }\n }\n else {\n const codepoints = Array.from(text)\n const codepointsLength = codepoints.length\n\n for (let i = 0; i < codepointsLength; i++) {\n const codepoint = codepoints[i]\n const nextOffset = offset + strlen(codepoint)\n\n if (nextOffset > maxCharacters)\n break\n\n offset = nextOffset\n offsetUtf16 += codepoint.length\n }\n }\n\n return offsetUtf16\n}\n\nfunction $wrapOverflowedNodes(offset: number): void {\n const dfsNodes = $dfs()\n const dfsNodesLength = dfsNodes.length\n let accumulatedLength = 0\n\n for (let i = 0; i < dfsNodesLength; i += 1) {\n const { node } = dfsNodes[i]\n\n if ($isOverflowNode(node)) {\n const previousLength = accumulatedLength\n const nextLength = accumulatedLength + node.getTextContentSize()\n\n if (nextLength <= offset) {\n const parent = node.getParent()\n const previousSibling = node.getPreviousSibling()\n const nextSibling = node.getNextSibling()\n $unwrapNode(node)\n const selection = $getSelection()\n\n // Restore selection when the overflow children are removed\n if (\n $isRangeSelection(selection)\n && (!selection.anchor.getNode().isAttached()\n || !selection.focus.getNode().isAttached())\n ) {\n if ($isTextNode(previousSibling))\n previousSibling.select()\n else if ($isTextNode(nextSibling))\n nextSibling.select()\n else if (parent !== null)\n parent.select()\n }\n }\n else if (previousLength < offset) {\n const descendant = node.getFirstDescendant()\n const descendantLength\n = descendant !== null ? descendant.getTextContentSize() : 0\n const previousPlusDescendantLength = previousLength + descendantLength\n // For simple text we can redimension the overflow into a smaller and more accurate\n // container\n const firstDescendantIsSimpleText\n = $isTextNode(descendant) && descendant.isSimpleText()\n const firstDescendantDoesNotOverflow\n = previousPlusDescendantLength <= offset\n\n if (firstDescendantIsSimpleText || firstDescendantDoesNotOverflow)\n $unwrapNode(node)\n }\n }\n else if ($isLeafNode(node)) {\n const previousAccumulatedLength = accumulatedLength\n accumulatedLength += node.getTextContentSize()\n\n if (accumulatedLength > offset && !$isOverflowNode(node.getParent())) {\n const previousSelection = $getSelection()\n let overflowNode\n\n // For simple text we can improve the limit accuracy by splitting the TextNode\n // on the split point\n if (\n previousAccumulatedLength < offset\n && $isTextNode(node)\n && node.isSimpleText()\n ) {\n const [, overflowedText] = node.splitText(\n offset - previousAccumulatedLength,\n )\n overflowNode = $wrapNode(overflowedText)\n }\n else {\n overflowNode = $wrapNode(node)\n }\n\n if (previousSelection !== null)\n $setSelection(previousSelection)\n\n mergePrevious(overflowNode)\n }\n }\n }\n}\n\nfunction $wrapNode(node: LexicalNode): OverflowNode {\n const overflowNode = $createOverflowNode()\n node.insertBefore(overflowNode)\n overflowNode.append(node)\n return overflowNode\n}\n\nfunction $unwrapNode(node: OverflowNode): LexicalNode | null {\n const children = node.getChildren()\n const childrenLength = children.length\n\n for (let i = 0; i < childrenLength; i++)\n node.insertBefore(children[i])\n\n node.remove()\n return childrenLength > 0 ? children[childrenLength - 1] : null\n}\n\nexport function mergePrevious(overflowNode: OverflowNode): void {\n const previousNode = overflowNode.getPreviousSibling()\n\n if (!$isOverflowNode(previousNode))\n return\n\n const firstChild = overflowNode.getFirstChild()\n const previousNodeChildren = previousNode.getChildren()\n const previousNodeChildrenLength = previousNodeChildren.length\n\n if (firstChild === null) {\n overflowNode.append(...previousNodeChildren)\n }\n else {\n for (let i = 0; i < previousNodeChildrenLength; i++)\n firstChild.insertBefore(previousNodeChildren[i])\n }\n\n const selection = $getSelection()\n\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor\n const anchorNode = anchor.getNode()\n const focus = selection.focus\n const focusNode = anchor.getNode()\n\n if (anchorNode.is(previousNode)) {\n anchor.set(overflowNode.getKey(), anchor.offset, 'element')\n }\n else if (anchorNode.is(overflowNode)) {\n anchor.set(\n overflowNode.getKey(),\n previousNodeChildrenLength + anchor.offset,\n 'element',\n )\n }\n\n if (focusNode.is(previousNode)) {\n focus.set(overflowNode.getKey(), focus.offset, 'element')\n }\n else if (focusNode.is(overflowNode)) {\n focus.set(\n overflowNode.getKey(),\n previousNodeChildrenLength + focus.offset,\n 'element',\n )\n }\n }\n\n previousNode.remove()\n}\n","let handleClickAndPointerDownListenersCount = 0\nlet handleClickAndPointerDownListenersUnregister: (() => void) | undefined\n\nexport function registerClickAndPointerListeners(register: () => void, unregister: () => void) {\n if (handleClickAndPointerDownListenersCount++ === 0) {\n register()\n handleClickAndPointerDownListenersUnregister = unregister\n }\n\n return () => {\n if (--handleClickAndPointerDownListenersCount === 0) {\n handleClickAndPointerDownListenersUnregister?.()\n handleClickAndPointerDownListenersUnregister = undefined\n }\n }\n}\n","import { COMMAND_PRIORITY_HIGH, type LexicalCommand, type LexicalEditor } from 'lexical'\nimport { readonly, ref } from 'vue'\nimport { useMounted } from './utils'\n\nexport function useLexicalCommandsLog(\n editor: LexicalEditor,\n) {\n const loggedCommands = ref<Array<LexicalCommand<unknown> & { payload: unknown }>>([])\n\n useMounted(() => {\n \n const unregisterCommandListeners = new Set<() => void>()\n\n for (const [command] of editor._commands) {\n unregisterCommandListeners.add(\n editor.registerCommand(\n command,\n (payload) => {\n loggedCommands.value = [\n ...loggedCommands.value,\n {\n payload,\n type: command.type ? command.type : 'UNKNOWN',\n },\n ]\n\n if (loggedCommands.value.length > 10)\n loggedCommands.value.shift()\n\n return false\n },\n COMMAND_PRIORITY_HIGH,\n ),\n )\n }\n\n return () => {\n unregisterCommandListeners.forEach(unregister => unregister())\n }\n })\n\n return readonly(loggedCommands)\n}\n","import { readonly, ref } from 'vue'\nimport { $isRootTextContentEmptyCurry } from '@lexical/text'\nimport type { LexicalEditor } from 'lexical'\nimport { useMounted } from './utils'\n\nexport function useLexicalIsTextContentEmpty(editor: LexicalEditor, trim?: boolean) {\n const isEmpty = ref(\n editor\n .getEditorState()\n .read($isRootTextContentEmptyCurry(editor.isComposing(), trim)),\n )\n\n useMounted(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n const isComposing = editor.isComposing()\n isEmpty.value = editorState.read(\n $isRootTextContentEmptyCurry(isComposing, trim),\n )\n })\n })\n\n return readonly(isEmpty)\n}\n","\nimport type { DOMConversionMap, SerializedElementNode, NodeKey, Spread, EditorConfig, DOMExportOutput, DOMConversion, LexicalEditor, LexicalNode } from 'lexical'\nimport { $isTextNode, ElementNode } from 'lexical'\nimport { getCSSFromStyleObject, getStyleObjectFromRawCSS } from '../utils'\n\n/**\n * 节点序列化 \n */\nexport type SerializedHtmlElementNode = Spread<{ tag: string, style?: string, class?: string }, SerializedElementNode>\n/**\n * 其他位置Html节点\n */\nexport class HtmlElementNode extends ElementNode {\n\n __tagName: string\n __class?: string\n\n static getType(): string { return \"html-element\"; }\n\n static clone(node: HtmlElementNode): HtmlElementNode {\n return new HtmlElementNode(node.__tagName, node.__class, node.__style, node.__key)\n }\n\n static importJSON(serializedNode: SerializedHtmlElementNode): HtmlElementNode {\n return new HtmlElementNode(serializedNode.tag, serializedNode.class, serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: $covertHtmlElementDOM,\n section: $covertHtmlElementDOM,\n main: $covertHtmlElementDOM,\n header: $covertHtmlElementDOM\n }\n }\n\n /**\n * \n * @param tagName \n * @param className \n * @param style \n * @param key \n */\n constructor(tagName: string, className?: string , style?: string, key?: NodeKey) {\n super(key)\n this.__tagName = tagName,\n this.__class = className;\n this.__style = style || \"\";\n }\n\n /**\n * 名称\n * @returns \n */\n getName(){ return this.__tagName; }\n\n /**\n * 描述\n * @returns \n */\n getDesc(){ return this.__class?.split(/[\\s]/g).join(\".\")}\n\n /**\n * 添加样式\n * @param plaload \n */\n addStyle(plaload:any){\n const styleObj = Object.assign(getStyleObjectFromRawCSS(this.__style),plaload);\n return this.setStyle(getCSSFromStyleObject(styleObj));\n }\n\n /**\n * 获取样式对象\n */\n getStyleObj(){\n return getStyleObjectFromRawCSS(this.__style);\n }\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedHtmlElementNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n tag: this.__tagName,\n class: this.__class,\n style: this.__style,\n version: 1\n }\n }\n\n /**\n * 导出DOM\n * @returns \n */\n exportDOM(editor:LexicalEditor): DOMExportOutput {\n \n const element = this.createDOM(editor._config)\n\n // 删除不用的key\n element.removeAttribute(\"node-key\");\n element.removeAttribute(\"contenteditable\")\n element.removeAttribute(\"data-lexical-decorator\")\n\n return { element }\n }\n\n /**\n * 创建渲染DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n\n const element = document.createElement(this.__tagName)\n\n if (this.__class) {\n element.setAttribute(\"class\", this.__class)\n }\n\n if (this.__style) {\n element.setAttribute(\"style\", this.__style)\n }\n\n return element;\n }\n\n /**\n * 开始折叠\n * 目前看 删除节点的时候会调用\n * @returns \n */\n collapseAtStart() {\n\n const children = this.getChildren();\n\n // 判断空内容的时候 直接删除自己\n if (children.length === 0 || $isTextNode(children[0]) && children[0].getTextContent().trim() === \"\") {\n this.remove();\n return true;\n }\n return false;\n }\n\n /**\n * 更新DOM\n * @returns\n * @param prevNode\n * @param dom\n * @param config\n */\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\n dom.setAttribute(\"class\",this.__class ?? \"\")\n dom.setAttribute(\"style\",this.__style)\n return false;\n }\n\n}\n\n/**\n * 转换DOM\n * @param node \n * @returns \n */\nconst $covertHtmlElementDOM = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\n return {\n conversion: () => {\n return {\n node: new HtmlElementNode(domNode.tagName, domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\n };\n },\n priority: 2\n };\n}\n\n/**\n * 判断是否是HtmlElementNode\n * @param node \n * @returns \n */\nexport function $isHtmlElementNode(\n node: HtmlElementNode | LexicalNode | null | undefined,\n): node is HtmlElementNode {\n return node instanceof HtmlElementNode\n}\n","\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n Spread,\n SerializedLexicalNode,\n LexicalEditor,\n DOMConversion\n} from 'lexical'\nimport { DecoratorNode ,ElementNode } from 'lexical'\nimport { Component } from 'vue';\nimport { getCSSFromStyleObject, getStyleObjectFromRawCSS } from '../utils';\n\n/**\n * 节点序列化 \n */\nexport type SerializedHtmlElementDecoratorNode = Spread<{ tag: string, style?: string, class?: string }, SerializedLexicalNode>\n\n/**\n * 隔离的HTML节点\n */\nexport class HtmlElementDecoratorNode extends DecoratorNode<Component|null> {\n\n __tagName: string\n __class?: string\n __style: string\n\n static getType(): string { return \"html-decorator-element\"; }\n\n static clone(node: HtmlElementDecoratorNode): HtmlElementDecoratorNode {\n return new HtmlElementDecoratorNode(node.__tagName, node.__class, node.__style, node.__key)\n }\n\n static importJSON(serializedNode: SerializedHtmlElementDecoratorNode): HtmlElementDecoratorNode {\n return new HtmlElementDecoratorNode(serializedNode.tag, serializedNode.class, serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: $covertHtmlElementDecoratorNode,\n section: $covertHtmlElementDecoratorNode\n }\n }\n\n /**\n * \n * @param tagName \n * @param className \n * @param style \n * @param key \n */\n constructor(tagName: string, className?: string , style?: string, key?: NodeKey) {\n super(key)\n this.__tagName = tagName,\n this.__class = className;\n this.__style = style || \"\";\n }\n\n /**\n * 名称\n * @returns \n */\n getName(){ return this.getType(); }\n\n /**\n * 描述\n * @returns \n */\n getDesc(){ return this.__class?.split(/[\\s]/g).join(\".\")}\n\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedHtmlElementDecoratorNode {\n return {\n type: this.getType(),\n tag: this.__tagName,\n class: this.__class,\n style: this.__style,\n version: 1\n }\n }\n\n /**\n * 导出DOM\n * @returns \n */\n exportDOM(editor:LexicalEditor): DOMExportOutput {\n \n const element = this.createDOM(editor._config)\n\n // 删除不用的key\n element.removeAttribute(\"node-key\");\n\n return { element }\n }\n\n /**\n * 创建渲染DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n\n const element = document.createElement(this.__tagName)\n\n if (this.__class) {\n element.setAttribute(\"class\", this.__class)\n }\n\n if (this.__style) {\n element.setAttribute(\"style\", this.__style)\n }\n\n element.setAttribute(\"node-key\",this.__key);\n \n\n return element;\n }\n\n /**\n * 隔离渲染函数\n * @param editor \n * @param config \n * @returns \n */\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\n return null;\n }\n\n /**\n * 设置样式\n * @param style \n * @returns \n */\n setStyle(style:string) {\n const self = this.getWritable();\n self.__style = style || \"\";\n return this;\n }\n\n /**\n * 添加样式\n * @param payload \n */\n addStyle(payload:any){\n const styleObj = Object.assign(getStyleObjectFromRawCSS(this.__style),payload);\n return this.setStyle(getCSSFromStyleObject(styleObj));\n }\n\n /**\n * 获取样式对象\n */\n getStyleObj(){\n return getStyleObjectFromRawCSS(this.__style);\n }\n \n /**\n * 更新DOM\n * @returns\n * @param prevNode\n * @param dom\n * @param config\n */\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\n dom.setAttribute(\"class\",this.__class ?? \"\")\n dom.setAttribute(\"style\",this.__style)\n return false;\n }\n \n /**\n * 是否是独立的\n * @returns \n */\n isIsolated() { return true; }\n \n /**\n * 如果是内联元素的话会导致容器将其当字符串处理 将会有换行符存在\n * @returns \n */\n isInline() { return false; }\n\n /**\n * 是否允许键盘选择\n * @returns \n */\n isKeyboardSelectable() { return true; }\n}\n\n/**\n * 判断是否是隔离的HTML节点\n * @param node \n * @returns \n */\nexport function $isHtmlElementDecoratorNode(\n node: HtmlElementDecoratorNode | LexicalNode | null | undefined,\n): node is HtmlElementDecoratorNode {\n return node instanceof HtmlElementDecoratorNode\n}\n\n/**\n * 转换隔离节点DOM\n * @param node \n * @returns \n */\nconst $covertHtmlElementDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\n return domNode.classList.contains(\"clear\") || domNode.classList.contains(\"mk-doc__decorator\") ? {\n conversion: () => {\n return {\n node: new HtmlElementDecoratorNode(domNode.tagName, domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\n };\n },\n priority: 2\n } : null;\n}\n","\nimport {\n type DOMConversionMap,\n type DOMExportOutput,\n type EditorConfig,\n type LexicalNode,\n type NodeKey,\n type Spread,\n type LexicalEditor,\n type DOMConversion,\n type LexicalCommand,\n createCommand\n} from 'lexical'\nimport { Component } from 'vue';\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\nimport { ModuleDecoratorWarpNode } from './ModuleDecoratorWarpNode';\n\n\n/**\n * 属性类型\n */\nexport type ModulePropType = { name:string,data:object };\n\n/**\n * 插入模块模版块指令\n */\nexport const INSERT_MODULE_COMMAND: LexicalCommand<ModulePropType> = createCommand('INSERT_MODULE_COMMAND')\n\n/**\n * 节点序列化 \n */\nexport type SerializedModuleDecoratorNode = Spread<{ moduleName:string,moduleHtml:any }, SerializedHtmlElementDecoratorNode>\n\n\n// 属性标识\nexport const AttrMarkName = \"module-name\";\n\n/**\n * 模块\n * 会导致\n */\nexport class ModuleDecoratorNode extends HtmlElementDecoratorNode {\n\n __moduleName: string\n __moduleHtml: string\n\n\n static getType(): string { return \"module\"; }\n\n static clone(node: ModuleDecoratorNode): ModuleDecoratorNode {\n return new ModuleDecoratorNode(node.__moduleName,node.__moduleHtml,node.__class,node.__style,node.__key);\n }\n\n static importJSON(serializedNode: SerializedModuleDecoratorNode): ModuleDecoratorNode {\n return new ModuleDecoratorNode(serializedNode.moduleName,serializedNode.moduleHtml,serializedNode.class, serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: $covertModuleDecoratorNode,\n section: $covertModuleDecoratorNode,\n main : $covertModuleDecoratorNode ,\n header : $covertModuleDecoratorNode \n }\n }\n\n /**\n * \n * @param name \n * @param data \n * @param className \n * @param style \n * @param key \n */\n constructor(name:string,html:string,className?: string , style?: string, key?: NodeKey) {\n super(\"div\",className,style,key)\n this.__moduleName = name;\n this.__moduleHtml = html;\n }\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedModuleDecoratorNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n moduleName:this.__moduleName,\n moduleHtml:this.__moduleHtml,\n version: 1\n }\n }\n\n /**\n * 创建渲染DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n\n const warpEl = super.createDOM(config)\n\n warpEl.innerHTML = this.__moduleHtml;\n\n if(warpEl.children.length > 1){\n throw new Error(\"定义模块模版的时候请用一个容器将模版内容包裹起来,不能有多个并列的元素!\");\n }\n\n const element = warpEl.children[0] as HTMLElement;\n\n // 模块名称标识\n element.setAttribute(AttrMarkName,this.__moduleName)\n element.setAttribute(\"node-key\",this.__key);\n\n return element;\n }\n\n /**\n * 隔离渲染函数\n * @param editor \n * @param config \n * @returns \n */\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\n return null;\n }\n \n /**\n * 更新DOM\n * @param _prevNode \n * @param _dom \n * @param _config \n * @returns \n */\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\n dom.innerHTML = this.__moduleHtml;\n return false;\n }\n\n /**\n * 设置 html\n * @param html \n * @returns \n */\n setHtml(html:string) {\n const self = this.getWritable();\n self.__moduleHtml = html || \"\";\n return this;\n }\n // /**\n // * 创建父亲\n // * */\n // createParentElementNode() {\n // return new ModuleDecoratorWarpNode();\n // }\n // /**\n // * 必须有父亲\n // * @returns \n // */\n // isParentRequired() { return true; }\n}\n\n/**\n * 转换隔离节点DOM\n * @param node \n * @returns \n */\nconst $covertModuleDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\n\n try{\n \n const moduleName = domNode.getAttribute(AttrMarkName);\n const moduleHtml = domNode.outerHTML;\n\n return moduleName ? {\n conversion: () => {\n return {\n node: new ModuleDecoratorNode(moduleName,moduleHtml,domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\n };\n },\n priority: 3\n } : null;\n }\n catch(e){\n console.log(e)\n return null;\n }\n \n}\n\n\n/**\n * 判断是否是模块节点\n * @param node \n * @returns \n */\nexport function $isModuleDecoratorNode(\n node: ModuleDecoratorNode | LexicalNode | null | undefined,\n): node is ModuleDecoratorNode {\n return node instanceof ModuleDecoratorNode\n}\n\n\n// 元素属性列表\nconst ElAttrList = [\"src\",\"alt\",\"poster\",\"href\",\"_target\"];\n\n/**\n * 创建 模块 html\n * @param template \n * @param data \n */\nexport const createModuleHtml = (template:string,data:any)=>{\n\n const parser = new DOMParser();\n const element = parser.parseFromString(template,\"text/html\")\n const list = [element.body];\n\n Object.keys(data).forEach(key=>{\n\n for(let i=0;i<list.length;i++){\n\n const el = list[i];\n const val = data[key] as any;\n \n // 忽略文本节点\n if(el.nodeType != 3){\n // 属性解析\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${key}-${attr}`)).\n some(attr=> el.setAttribute(attr,val))){ break; }\n // 文本解析\n else if(el.hasAttribute(`data-${key}`)){\n el.textContent = val;\n break;\n }\n else if(el.hasAttribute(`data-${key}-html`)){\n el.innerHTML = val;\n break;\n } \n }\n\n // 广域递归\n if(el.childNodes.length){\n el.childNodes.forEach((sub:any)=>list.push(sub))\n }\n }\n })\n\n return element.body.innerHTML.replaceAll(/[\\r|\\n|\\r\\n]+/g,\"\")\n}\n\n/**\n * 获取模块数据 \n * @param template \n * @param data \n */\nexport const getModuleData = (html:string,options:Array<any>)=>{\n\n\n const parser = new DOMParser();\n const element = parser.parseFromString(html,\"text/html\")\n const list = [element.body];\n const data:any = {};\n\n options.forEach(item=>{\n\n for(let i=0;i<list.length;i++){\n\n const el = list[i];\n const val = \"\";\n\n // 忽略文本节点\n if(el.nodeType != 3){\n // 属性解析\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${item.name}-${attr}`)).\n some(attr=> data[item.name] = el.getAttribute(attr))){ break; }\n // 文本解析\n else if(el.hasAttribute(`data-${item.name}`)){\n data[item.name] = el.textContent;\n break;\n }\n // html 解析\n else if(el.hasAttribute(`data-${item.name}-html`)){\n data[item.name] = el.innerHTML;\n break;\n } \n }\n\n // 广域递归\n if(el.childNodes.length){\n el.childNodes.forEach((sub:any)=>list.push(sub))\n }\n\n data[item.name] = val;\n }\n })\n\n return data\n}\n","import type { DOMConversionMap, LexicalCommand, LexicalNode, NodeKey, Spread, DOMExportOutput, EditorConfig } from 'lexical'\nimport { createCommand, } from 'lexical'\nimport { HtmlElementNode,SerializedHtmlElementNode } from './HtmlElementNode'\nimport { AttrMarkName } from './ModuleDecoratorNode'\n\n/**\n * 节点序列化\n */\nexport type SerializedModuleDecoratorWarpNode = Spread<{},SerializedHtmlElementNode>\n\n/**\n * 模块容器\n */\nexport class ModuleDecoratorWarpNode extends HtmlElementNode{\n\n static getType(): string { return \"moduleWarp\"; }\n\n static clone(node: ModuleDecoratorWarpNode): ModuleDecoratorWarpNode {\n return new ModuleDecoratorWarpNode(node.__class,node.__style, node.__key)\n }\n\n static importJSON(serializedNode: SerializedModuleDecoratorWarpNode): ModuleDecoratorWarpNode {\n return new ModuleDecoratorWarpNode(serializedNode.class,serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div : (domNode: HTMLElement) => {\n // 儿子是模块的就是模块容器\n return domNode.children[0] && domNode.children[0].getAttribute(AttrMarkName) ? {\n \n conversion: ()=>{ \n \n return { \n node:new ModuleDecoratorWarpNode(\n domNode.className.trim(),\n domNode.getAttribute(\"style\") || \"\"\n ) \n };\n },\n priority: 3\n } : null;\n }\n }\n }\n\n constructor(className?:string,style?:string,key?: NodeKey) {\n super(\"div\",className,style,key)\n }\n\n /**\n * 名称\n * @returns \n */\n getName(){ return this.getType(); }\n\n /**\n * 描述\n * @returns \n */\n getDesc(){ return \"模块容器\"; }\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedModuleDecoratorWarpNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n version: 1\n }\n }\n\n\n /**\n * 创建渲染DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n\n const element = super.createDOM(config)\n \n element.setAttribute(\"node-key\",this.__key);\n\n return element;\n }\n}\n\n\n/**\n * 判断是否是模块容器节点\n * @param node \n * @returns \n */\nexport function $isModuleDecoratorWarpNode(\n node: ModuleDecoratorWarpNode | LexicalNode | null | undefined,\n): node is ModuleDecoratorWarpNode {\n return node instanceof ModuleDecoratorWarpNode\n}\n","\nimport type {\n DOMConversionMap,\n DOMExportOutput,\n EditorConfig,\n LexicalNode,\n NodeKey,\n Spread,\n SerializedLexicalNode,\n LexicalEditor\n} from 'lexical'\nimport { Component } from 'vue';\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\nimport { type LexicalCommand, createCommand } from 'lexical'\n\n/**\n * 插入图片指令\n */\nexport const INSERT_IMAGE_COMMAND: LexicalCommand<{src:string,alt?:string,style?:string}> = createCommand('INSERT_IMAGE_COMMAND')\n\n// 默认图片\nconst ImageDefaultSrc = \"data:image/png;base64,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\";\n\n/**\n * 图片节点序列化\n */\nexport type SerializedImageNode = Spread<{ src: string,alt?:string }, SerializedHtmlElementDecoratorNode>\n\n/** \n * 定义图片节点\n */\nexport class ImageNode extends HtmlElementDecoratorNode {\n __src: string\n __alt?:string\n\n static getType(): string { return 'image' }\n\n\n static clone(node: ImageNode): ImageNode {\n return new ImageNode(node.__src, node.__alt,node.__class,node.__style,node.__key)\n }\n\n static importJSON(serializedNode: SerializedImageNode): ImageNode {\n return $createImageNode(serializedNode.src,serializedNode.alt,serializedNode.class,serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n img: (el: HTMLElement) => {\n const src = el.getAttribute('src');\n const alt = el.getAttribute('alt');\n return el.tagName.toLowerCase() == \"img\" ? {\n conversion: (domNode: HTMLElement) => {\n return { \n node:$createImageNode(src ?? \"\",alt ?? undefined,domNode.className,domNode.getAttribute(\"style\") ?? \"\") \n };\n },\n priority: 1\n } : null\n },\n }\n }\n\n constructor(src: string,alt?:string,className?:string,style?:string, key?: NodeKey) {\n super(\"img\",className,style,key)\n this.__src = src\n this.__alt = alt\n }\n\n /**\n * 隔离渲染函数\n * @param editor \n * @param config \n * @returns \n */\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\n return null;\n }\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedImageNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n version: 1,\n src: this.__src,\n alt: this.__alt\n }\n }\n\n\n /**\n * 设置src\n * @param src \n * @returns \n */\n setSrc(src:string) {\n const self = this.getWritable();\n self.__src = src || \"\";\n return this;\n }\n\n /**\n * 设置 alt\n * @param alt \n * @returns \n */\n setAlt(alt:string) {\n const self = this.getWritable();\n self.__alt= alt || \"\";\n return this;\n }\n /**\n * 创建DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n\n const element = super.createDOM(config);\n\n if(this.__src){\n element.setAttribute('src', this.__src) \n }\n else{\n element.setAttribute('src', ImageDefaultSrc) \n }\n\n if(this.__alt){\n element.setAttribute('alt', this.__alt)\n }\n\n return element\n }\n\n /**\n * 更新DOM\n * @param _prevNode \n * @param _dom \n * @param _config \n * @returns \n */\n updateDOM(prevNode: ImageNode, dom: HTMLElement, config: EditorConfig): boolean {\n super.updateDOM(prevNode,dom,config);\n if(this.__src){\n dom.setAttribute('src', this.__src) \n }\n else{\n dom.setAttribute('src', ImageDefaultSrc) \n }\n\n if(this.__alt){\n dom.setAttribute('alt', this.__alt)\n }\n\n return false;\n }\n\n /**\n * @returns \n */\n isInline() { return true; }\n}\n\n\n/**\n * 创建图片节点\n * @param src \n * @returns \n */\nexport function $createImageNode(src: string,alt?:string,className?:string,style?:string): ImageNode {\n return new ImageNode(src,alt,className,style)\n}\n\n/**\n * 判断是否是图片节点\n * @param node \n * @returns \n */\nexport function $isImageNode(\n node: ImageNode | LexicalNode | null | undefined,\n): node is ImageNode {\n return node instanceof ImageNode\n}\n","import type { DOMConversionMap, LexicalCommand, LexicalNode, NodeKey, Spread, DOMExportOutput, LexicalEditor, EditorConfig } from 'lexical'\nimport { $createParagraphNode, createCommand, } from 'lexical'\nimport { HtmlElementNode,SerializedHtmlElementNode } from './HtmlElementNode'\nimport { ImageNode } from './ImageNode'\nimport { HtmlElementDecoratorNode } from './HtmlElementDecoratorNode' \n\n/**\n * 插入图文\n */\nexport const INSERT_IMAGETEXTWARP_COMMAND: LexicalCommand<string|undefined|null> = createCommand('INSERT_IMAGETEXTWARP_COMMAND')\n\n/**\n * 图文节点序列化\n */\nexport type SerializedImageTextWarpNode = Spread<{},SerializedHtmlElementNode>\n\n/**\n * 图文环绕\n */\nconst MarkClassName = \"mk-doc__image-text-warp\"\n\n/**\n * 图文环绕\n */\nexport class ImageTextWarpNode extends HtmlElementNode{\n\n \n static getType(): string { return \"imageTextWarp\"; }\n\n static clone(node: ImageTextWarpNode): ImageTextWarpNode {\n return new ImageTextWarpNode(node.__class,node.__style, node.__key)\n }\n\n static importJSON(serializedNode: SerializedImageTextWarpNode): ImageTextWarpNode {\n return new ImageTextWarpNode(serializedNode.class,serializedNode.style)\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div : (domNode: HTMLElement) => {\n\n // document.querySelector(\"div\").ownerDocument.defaultView\n // mk-doc__image-text class 是为了兼容老的图文环绕 \n let isImageTextWarp =domNode.classList.contains(MarkClassName)\n const firstEl = domNode.children[0] as HTMLImageElement;\n\n // 也是图文环绕\n if(firstEl && firstEl.tagName.toLowerCase() == \"img\" && (firstEl.style.float == \"left\" || firstEl.style.float == \"right\")){\n isImageTextWarp = true;\n }\n \n return isImageTextWarp ? {\n\n conversion: ()=>{ \n return { \n node:new ImageTextWarpNode(\n domNode.className.replace(MarkClassName,\"\").trim(),\n domNode.getAttribute(\"style\") || \"\"\n ) \n };\n },\n priority: 3\n } : null;\n }\n }\n }\n\n constructor(className?:string,style?:string,key?: NodeKey) {\n super(\"div\",className,style,key)\n }\n\n /**\n * 选中标题\n * @returns \n */\n getDesc(){ return \"图文环绕\"; }\n\n /**\n * 导出JSON\n * @returns \n */\n exportJSON(): SerializedImageTextWarpNode {\n return {\n ...super.exportJSON(),\n type: this.getType(),\n version: 1\n }\n }\n\n /**\n * 导出DOM\n * @returns \n */\n exportDOM(editor:LexicalEditor): DOMExportOutput {\n\n const element = this.createDOM(editor._config)\n\n return { element }\n }\n \n /**\n * 创建渲染DOM\n * @param config \n * @returns \n */\n createDOM(config: EditorConfig): HTMLElement {\n const element = super.createDOM(config)\n // 追加 编辑 标识 class\n if(!element.classList.contains(MarkClassName)){\n element.classList.add(MarkClassName)\n }\n return element;\n }\n\n /**\n * 更新DOM 重置标识\n * @param prevNode \n * @param dom \n * @param config \n * @returns \n */\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\n super.updateDOM(prevNode,dom,config);\n // 追加 编辑 标识 class\n if(!dom.classList.contains(MarkClassName)){\n dom.classList.add(MarkClassName)\n }\n return false;\n }\n}\n\n/**\n * 判断是否是图文节点\n * @param node \n * @returns \n */\nexport function $isImageTextWarpNode(\n node: ImageTextWarpNode | LexicalNode | null | undefined,\n): node is ImageTextWarpNode {\n return node instanceof ImageTextWarpNode\n}\n\n\n/**\n * 创建图文节点\n * @param node \n * @returns \n */\nexport function $createImageTextWarpNode(){\n\n const imageTextWarp = new ImageTextWarpNode()\n const textWarp = new HtmlElementNode(\"div\")\n\n textWarp.append($createParagraphNode())\n textWarp.append($createParagraphNode())\n textWarp.append($createParagraphNode())\n textWarp.append($createParagraphNode())\n textWarp.append($createParagraphNode())\n textWarp.append($createParagraphNode())\n\n imageTextWarp.append(new ImageNode(\"\",\"\",\"\",\"margin:0 10px 10px 0;width:200px;float:left\"));\n imageTextWarp.append(textWarp)\n imageTextWarp.append(textWarp)\n const clearNode = new HtmlElementDecoratorNode(\"div\",\"mk-doc__decorator\",\"clear:both\")\n imageTextWarp.append(clearNode)\n return imageTextWarp;\n}\n","\n\nimport { type LexicalCommand, createCommand} from 'lexical'\n\n/**\n * 插入模版块指令\n */\nexport const INSERT_TEMPLATE_COMMAND: LexicalCommand<string> = createCommand('INSERT_TEMPLATE_COMMAND')\n\n/**\n * 插入HTML模版块指令 \n */\nexport const INSERT_HTMLTEMPLATE_COMMAND: LexicalCommand<string> = createCommand('INSERT_HTMLTEMPLATE_COMMAND')\n","\n\nimport { $copyNode, $isElementNode, LexicalNode } from 'lexical'\n\nexport * from './HtmlElementNode'\nexport * from './HtmlElementDecoratorNode'\nexport * from './ModuleDecoratorNode'\nexport * from './ModuleDecoratorWarpNode'\nexport * from './ImageNode'\nexport * from './ImageTextWarpNode'\nexport * from './Template'\n\n\nexport const deepCloneNode = function(node:LexicalNode){\n\n const copyNode:any = $copyNode(node)\n\n if($isElementNode(node)){\n node.getChildren().forEach(child=>copyNode.append(deepCloneNode(child)))\n }\n\n return copyNode;\n}\n\n\n\n\n\n","import { \n ArtificialNode__DO_NOT_USE,\n $createLineBreakNode,\n LexicalEditor, \n LexicalNode,\n ElementNode,\n $isRootOrShadowRoot,\n $isBlockElementNode,\n ElementFormatType,\n $createParagraphNode,\n isInlineDomNode,\n $isElementNode,\n $getRoot,\n BaseSelection,\n $cloneWithProperties,\n $isTextNode,\n NodeSelection,\n RangeSelection,\n isHTMLElement\n} from \"lexical\";\n\nimport { isBlockDomNode } from \"@lexical/utils\"\nimport { $sliceSelectedTextNodeContent } from \"@lexical/selection\";\nimport { AttrMarkName } from \"../nodes\"\n\nconst domParser = new DOMParser()\n\n/**\n* 展开不确定的节点\n* @param allArtificialNodes \n*/\nconst unwrapArtificalNodes = function $unwrapArtificalNodes(allArtificialNodes:ElementNode[]|LexicalNode[]) {\n\n for (const node of allArtificialNodes) {\n\n if (node.getNextSibling() instanceof ArtificialNode__DO_NOT_USE) {\n node.insertAfter($createLineBreakNode());\n }\n }\n // Replace artificial node with it's children\n for (const node of allArtificialNodes) {\n\n // 元素的话\n if($isElementNode(node)){\n\n const children = node.getChildren();\n\n for (const child of children) {\n \n node.insertBefore(child);\n \n }\n \n node.remove();\n }\n }\n}\n\n// 获取节点转换器 就是 importDOM 定义的东西\nconst getConversionFunction = function(domNode:HTMLElement, editor:LexicalEditor) {\n\n const { nodeName } = domNode;\n\n const cachedConversions = editor._htmlConversions.get(nodeName.toLowerCase());\n\n let currentConversion = null;\n\n if (cachedConversions !== undefined) {\n\n for (const cachedConversion of cachedConversions) {\n\n const domConversion = cachedConversion(domNode);\n\n // 一直找到优先级最高的节点转换器\n if (domConversion !== null && (currentConversion === null || (currentConversion.priority || 0) < (domConversion.priority || 0))) {\n \n currentConversion = domConversion;\n }\n }\n\n }\n\n return currentConversion !== null ? currentConversion.conversion : null;\n}\n\n/**\n* 给内联节点包一个块节点\n* @param domNode \n* @param nodes \n* @param createWrapperFn \n* @returns \n*/\nconst wrapContinuousInlines = function (domNode : HTMLElement, nodes:LexicalNode[], createWrapperFn:Function) {\n\n const textAlign = domNode.style.textAlign;\n const out = [];\n let continuousInlines = [];\n // wrap contiguous inline child nodes in para\n for (let i = 0; i < nodes.length; i++) {\n\n const node = nodes[i];\n\n if ($isBlockElementNode(node)) {\n\n if (textAlign && !node.getFormat()) {\n node.setFormat(textAlign as ElementFormatType);\n }\n\n out.push(node);\n } \n else {\n\n continuousInlines.push(node);\n\n if (i === nodes.length - 1 || i < nodes.length - 1 && $isBlockElementNode(nodes[i + 1])) {\n const wrapper = createWrapperFn();\n wrapper.setFormat(textAlign);\n wrapper.append(...continuousInlines);\n out.push(wrapper);\n continuousInlines = [];\n }\n }\n }\n return out;\n}\n\nconst isDomNodeBetweenTwoInlineNodes = function (node:HTMLElement) {\n\n if (node.nextSibling == null || node.previousSibling == null) {\n return false;\n }\n\n return isInlineDomNode(node.nextSibling) && isInlineDomNode(node.previousSibling);\n}\n\n\n/**\n* 根据元素节点创建 LexicalNode\n* @param node \n* @param editor \n* @param allArtificialNodes \n* @param hasBlockAncestorLexicalNode \n* @param forChildMap \n* @param parentLexicalNode \n* @returns \n*/\nconst createNodesFromElement = function (node:HTMLElement, editor:LexicalEditor, allArtificialNodes:ElementNode[], hasBlockAncestorLexicalNode:boolean, forChildMap = new Map(), parentLexicalNode?:LexicalNode) {\n\n\n let lexicalNodes:LexicalNode[] = [];\n\n let currentLexicalNode = null;\n \n \n // if(node.getAttribute(\"module-name\")){\n // console.log(node,mname)\n // }\n const transformFunction = getConversionFunction(node, editor);\n\n const transformOutput = transformFunction ? transformFunction(node) : null;\n \n let postTransform = null;\n\n if (transformOutput !== null) {\n\n postTransform = transformOutput.after;\n\n const transformNodes = transformOutput.node;\n\n currentLexicalNode = Array.isArray(transformNodes) ? transformNodes[transformNodes.length - 1] : transformNodes;\n\n if (currentLexicalNode !== null) {\n\n for (const [, forChildFunction] of forChildMap) {\n\n currentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode);\n\n if (!currentLexicalNode) { break; }\n }\n\n if (currentLexicalNode) {\n lexicalNodes.push(...(Array.isArray(transformNodes) ? transformNodes : [currentLexicalNode]));\n }\n }\n\n if (transformOutput.forChild != null) {\n forChildMap.set(node.nodeName, transformOutput.forChild);\n }\n }\n\n // If the DOM node doesn't have a transformer, we don't know what\n // to do with it but we still need to process any childNodes.\n // 找到模块就不继续往下找了\n const children = isBlockDomNode(node) && node.hasAttribute(AttrMarkName) ? [] : node.childNodes;\n\n let childLexicalNodes = [];\n\n const hasBlockAncestorLexicalNodeForChildren = \n currentLexicalNode != null && \n (\n $isRootOrShadowRoot(currentLexicalNode) ? false \n : (currentLexicalNode != null && $isBlockElementNode(currentLexicalNode) || hasBlockAncestorLexicalNode)\n );\n \n for (let i = 0; i < children.length; i++) {\n childLexicalNodes.push(...createNodesFromElement(children[i] as HTMLElement, editor, allArtificialNodes, hasBlockAncestorLexicalNodeForChildren, new Map(forChildMap), currentLexicalNode));\n }\n\n if (postTransform != null) {\n childLexicalNodes = postTransform(childLexicalNodes);\n }\n\n if (isBlockDomNode(node)) {\n \n if (!hasBlockAncestorLexicalNodeForChildren) {\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, $createParagraphNode);\n } \n else {\n\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, () => {\n\n const artificialNode = new ArtificialNode__DO_NOT_USE();\n\n allArtificialNodes.push(artificialNode);\n\n return artificialNode;\n });\n }\n }\n\n if (currentLexicalNode == null) {\n\n if (childLexicalNodes.length > 0) {\n // If it hasn't been converted to a LexicalNode, we hoist its children\n // up to the same level as it.\n lexicalNodes = lexicalNodes.concat(childLexicalNodes);\n } \n else {\n if (isBlockDomNode(node) && isDomNodeBetweenTwoInlineNodes(node)) {\n // Empty block dom node that hasnt been converted, we replace it with a linebreak if its between inline nodes\n lexicalNodes = lexicalNodes.concat($createLineBreakNode());\n }\n }\n } \n else if ($isElementNode(currentLexicalNode)) {\n // If the current node is a ElementNode after conversion,\n // we can append all the children to it.\n currentLexicalNode.append(...childLexicalNodes);\n }\n return lexicalNodes;\n}\n\n\nexport const generateNodesFromHtml = function $generateNodesFromDOM(editor:LexicalEditor, html:string) {\n\n try {\n const doc = domParser.parseFromString(html,\"text/html\")\n\n const elements = doc.body.childNodes;\n \n let lexicalNodes:LexicalNode[] = [];\n \n const allArtificialNodes:ElementNode[] = [];\n \n for (let i = 0; i < elements.length; i++) {\n \n let element = elements[i] as HTMLElement; \n \n // 解决根不是块级元素的问题 忽略 换行符\n if(!isBlockDomNode(element) && element.nodeValue != \"\\n\" && element.nodeValue != \"\\r\\n\"){\n \n const p = document.createElement(\"p\")\n \n if(element instanceof Text){\n // .replace(/[\\n|\\r\\n]+/g,\"<br />\")\n p.textContent = element.data;\n \n }\n else{\n p.innerHTML = element.outerHTML ;\n }\n \n element = p;\n \n }\n \n const lexicalNode = createNodesFromElement(element, editor, allArtificialNodes,false);\n \n if (lexicalNode !== null) {\n lexicalNodes = lexicalNodes.concat(lexicalNode);\n }\n } \n unwrapArtificalNodes(allArtificialNodes);\n return lexicalNodes;\n } catch (error) {\n throw error;\n }\n}\n\n/**\n * \n * @param editor \n * @param currentNode \n * @param parentElement \n * @param selection \n * @returns \n */\nconst appendNodesToHTML = function (editor:LexicalEditor, currentNode:LexicalNode, parentElement:HTMLElement|DocumentFragment, selection:BaseSelection|NodeSelection|RangeSelection|null = null) {\n\n let shouldInclude = selection !== null ? currentNode.isSelected(selection) : true;\n\n const shouldExclude = $isElementNode(currentNode) && currentNode.excludeFromCopy('html');\n\n let target = currentNode;\n\n if (selection !== null) {\n\n let clone = $cloneWithProperties(currentNode);\n\n clone = $isTextNode(clone) && selection !== null ? $sliceSelectedTextNodeContent(selection, clone) : clone;\n\n target = clone;\n }\n\n const children = $isElementNode(target) ? target.getChildren() : [];\n const registeredNode = editor._nodes.get(target.getType());\n\n let exportOutput;\n\n // Use HTMLConfig overrides, if available.\n if (registeredNode && registeredNode.exportDOM !== undefined) {\n exportOutput = registeredNode.exportDOM(editor, target);\n } \n else {\n exportOutput = target.exportDOM(editor);\n }\n\n const { element, after } = exportOutput;\n\n if (!element) {\n return false;\n }\n\n const fragment = document.createDocumentFragment();\n\n for (let i = 0; i < children.length; i++) {\n\n const childNode = children[i];\n const shouldIncludeChild = appendNodesToHTML(editor, childNode, fragment, selection);\n\n if (!shouldInclude && $isElementNode(currentNode) && shouldIncludeChild && currentNode.extractWithChild(childNode, selection, 'html')) {\n shouldInclude = true;\n }\n }\n\n if (shouldInclude && !shouldExclude) {\n\n if (isHTMLElement(element)) { element.append(fragment); }\n\n parentElement.append(element);\n\n if (after) {\n\n const newElement = after.call(target, element);\n\n if (newElement) { element.replaceWith(newElement); }\n }\n\n } \n else {\n parentElement.append(fragment);\n }\n\n return shouldInclude;\n}\n\n/**\n * \n * @param editor \n * @param selection \n * @returns \n */\nexport const generateHtmlFromNodes = function $generateHtmlFromNodes(editor:LexicalEditor, selection?:BaseSelection) {\n\n // && typeof global.window === 'undefined'\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n throw new Error('To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.');\n }\n\n const container = document.createElement('div');\n const root = $getRoot();\n const topLevelChildren = root.getChildren();\n\n for (let i = 0; i < topLevelChildren.length; i++) {\n\n const topLevelNode = topLevelChildren[i];\n\n appendNodesToHTML(editor, topLevelNode, container, selection);\n\n }\n\n return container.innerHTML.trim();\n}\n\n/**\n * 美化html element\n * @param node \n * @param level \n * @returns \n */\nexport const prettifyHTMLElement = function (node: Element, level: number) {\n const indentBefore = Array.from({ length: level++ + 1 }).join(' ')\n const indentAfter = Array.from({ length: level - 1 }).join(' ')\n let textNode\n\n for (let i = 0; i < node.children.length; i++) {\n textNode = document.createTextNode(`\\n${indentBefore}`)\n node.insertBefore(textNode, node.children[i])\n prettifyHTMLElement(node.children[i], level)\n if (node.lastElementChild === node.children[i]) {\n textNode = document.createTextNode(`\\n${indentAfter}`)\n node.appendChild(textNode)\n }\n }\n return node\n}\n\n\n/**\n * 美化 html\n * @param str \n * @returns \n */\nexport const prettifyHTML = function (str: string) {\n const div = document.createElement('div')\n div.innerHTML = str.trim()\n return prettifyHTMLElement(div, 0).innerHTML.trim()\n}\n\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst SUPPORTED_URL_PROTOCOLS = new Set([\n 'http:',\n 'https:',\n 'mailto:',\n 'sms:',\n 'tel:',\n])\n\nexport function sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url)\n\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol))\n return 'about:blank'\n }\n catch {\n return url\n }\n return url\n}\n\n// Source: https://stackoverflow.com/a/8234912/2013580\nconst urlRegExp = /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/\nexport function validateUrl(url: string): boolean {\n // TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.\n // Maybe show a dialog where they user can type the URL before inserting it.\n return url === 'https://' || urlRegExp.test(url)\n}\n","\nconst CSS_TO_STYLES = new Map();\n\n/**\n * Creates an object containing all the styles and their values provided in the CSS string.\n * @param css - The CSS string of styles and their values.\n * @returns The styleObject containing all the styles and their values.\n */\nexport function getStyleObjectFromRawCSS(css:string) {\n const styleObject:any = {};\n const styles = css.split(';');\n for (const style of styles) {\n if (style !== '') {\n const [key, value] = style.split(/:([^]+)/); // split on first colon\n if (key && value) {\n styleObject[key.trim()] = value.trim();\n }\n }\n }\n return styleObject;\n }\n \n /**\n * Given a CSS string, returns an object from the style cache.\n * @param css - The CSS property as a string.\n * @returns The value of the given CSS property.\n */\n export function getStyleObjectFromCSS(css:string) {\n let value = CSS_TO_STYLES.get(css);\n if (value === undefined) {\n value = getStyleObjectFromRawCSS(css);\n CSS_TO_STYLES.set(css, value);\n }\n {\n // Freeze the value in DEV to prevent accidental mutations\n Object.freeze(value);\n }\n return value;\n }\n \n /**\n * Gets the CSS styles from the style object.\n * @param styles - The style object containing the styles to get.\n * @returns A string containing the CSS styles and their values.\n */\n export function getCSSFromStyleObject(styles:any) {\n let css = '';\n for (const style in styles) {\n if (style && styles[style]) {\n css += `${style}: ${styles[style]};`;\n }\n }\n return css;\n }\n","\nimport { Fragment,ref } from 'vue'\nimport { Dialoger } from '@maketribe/dm'\nimport { ElButton ,ElInput } from \"element-plus\";\n\n/**\n * \n * @param href \n * @returns \n */\nexport const showLinkEditDialog = async (href:any) => {\n return new Promise((resolve,reject) => {\n\n const hrefValue = ref(href)\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve(hrefValue.value);\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"设置连接\",\n class: \"mk-html-editor-dialog\",\n width: \"500px\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return <ElInput v-model={hrefValue.value} clearable={true} placeholder='http://www.xxx.com' v-slots={\n {\n prepend:()=>{\n return \"地址:\";\n }\n }\n }></ElInput>\n },\n footer: () => {\n return <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确定\n </ElButton>\n </Fragment>\n },\n });\n });\n}\n","import {ExtractPropTypes} from \"vue\";\nimport {buildProps} from \"@maketribe/utils\";\n\nexport const materialListProps = buildProps({\n materialTable: {\n type: null\n // type: MsMaterialTable,\n },\n selectable: {\n type: Boolean,\n default: false,\n },\n allowMaterialTypeValues: {\n type: Array,\n default: () => []\n },\n} as const);\n\nexport type MaterialListProps = ExtractPropTypes<typeof materialListProps>;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { ColumnOptions, DataForm } from \"@maketribe/dm\";\n\nexport const dataFormProps = buildProps({\n dataForm: {\n type: DataForm<any>,\n },\n name: {\n type: String,\n },\n mode: { type: String, default: \"form\" },\n labelPosition: { type: String },\n primaryKey: {\n type: String,\n },\n autoLoad: {\n type: Boolean,\n default: true,\n },\n loadInterfaceURL: {\n type: String,\n },\n addInterfaceURL: {\n type: String,\n },\n updateInterfaceURL: {\n type: String,\n },\n columns: {\n type: Array<ColumnOptions>,\n default: () => [],\n },\n} as const);\n\nexport type DataFormProps = ExtractPropTypes<typeof dataFormProps>;\n\nexport const dataFormEmits = {\n changeDataForm: (dataForm: any) => dataForm instanceof DataForm,\n cancel: () => true,\n error: (e: any) => e instanceof Error,\n submitted: (response: any) => !!response,\n};\n\nexport type DataFormEmits = typeof dataFormEmits;\n","import { InjectionKey } from \"vue\";\nimport { DataForm, FormColumn } from \"@maketribe/dm\";\n\nexport interface DataFormContext {\n dataForm: DataForm;\n el: HTMLElement | null;\n}\n\nexport const DATA_FORM_CONTEXT_KEY: InjectionKey<DataFormContext> =\n Symbol(\"dataFormContextKey\");\n\nexport interface DataFormItemContext {\n column: FormColumn;\n}\n\nexport const DATA_FORM_ITEM_CONTEXT_KEY: InjectionKey<DataFormItemContext> =\n Symbol(\"dataFormItemContextKey\");\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataForm } from \"@maketribe/dm\";\n\nexport const formProps = buildProps({\n rules: { type: Object },\n labelWidth: { type: String },\n labelPosition: { type: String },\n dataForm: { type: DataForm<any> },\n} as const);\n\nexport type FormProps = ExtractPropTypes<typeof formProps>;\n\nexport const formEmits = {};\n\nexport const FormEmits = typeof formEmits;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const dataFormItemProps = buildProps({\n name: { type: String },\n label: { type: String },\n required: { type: Boolean, default: false },\n disabled: { type: Boolean, default: null },\n labelPosition: { type: String },\n labelWidth:{ type: String },\n} as const);\n\nexport type DataFormItemProps = ExtractPropTypes<typeof dataFormItemProps>;\n","import { ElFormItem, useFormDisabled } from \"element-plus\";\nimport {\n Ref,\n computed,\n defineComponent,\n inject,\n provide,\n reactive,\n ref,\n toRaw,\n unref,\n useSlots,\n watch,\n} from \"vue\";\nimport { FormColumn } from \"@maketribe/dm\";\nimport { useFormColumnComponent } from \"../../../../composables\";\nimport { dataFormItemProps } from \"./data-form-item-options\";\nimport {\n DATA_FORM_CONTEXT_KEY,\n DATA_FORM_ITEM_CONTEXT_KEY,\n DataFormItemContext,\n} from \"../token\";\n\nexport default defineComponent({\n name: \"MKDataFormItem\",\n props: dataFormItemProps,\n setup(props) {\n const slots = useSlots();\n\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const dataForm = computed(() => dataFormContext?.dataForm ?? null);\n\n let _formColumn: FormColumn | null = null;\n\n const existFormColumn = ref(\n unref(dataForm)!.getColumn(props.name!)\n ) as Ref<FormColumn | null>;\n\n const formColumn = computed(() => {\n const existingColumn = unref(existFormColumn);\n\n if (existingColumn) {\n return existingColumn;\n }\n\n if (!_formColumn) {\n _formColumn = reactive(\n new FormColumn({\n required: props.required,\n name: props.name!,\n label: props.label!,\n })\n ) as FormColumn;\n }\n\n return _formColumn!;\n });\n\n watch(\n formColumn,\n (formColumn, _, onCleanup) => {\n const existFormColumn = unref(dataForm)!.getColumn(formColumn.name);\n\n if (!existFormColumn && _formColumn) {\n unref(dataForm)!.addColumn(_formColumn);\n }\n\n onCleanup(() => {\n if (_formColumn) {\n unref(dataForm)!.removeColumn(_formColumn);\n }\n });\n },\n { immediate: true }\n );\n\n const { component, componentProps } = useFormColumnComponent(\n formColumn,\n dataForm\n );\n\n const disabled = useFormDisabled(\n computed(() => props.disabled === null ? unref(formColumn).disabled : props.disabled )\n );\n\n const value = computed({\n get: () => unref(formColumn)?.getValue(),\n set: (v) => {\n unref(formColumn).setValue(v);\n },\n });\n\n const label = computed(() =>\n typeof props.label !== \"string\" ? unref(formColumn).label : props.label\n );\n\n // 表单项的默认样式\n const itemStyle = computed(() => {\n\n if(formColumn.value.style){\n return formColumn.value.style;\n }\n\n return formColumn.value.componentInfo == \"MKFormDetail\" ? \"\" : \"max-width:700px\"\n })\n\n provide(\n DATA_FORM_ITEM_CONTEXT_KEY,\n reactive({ column: formColumn }) as DataFormItemContext\n );\n\n return () => {\n let _formColumn = unref(formColumn);\n\n let _component = unref(component);\n\n let children: any =\n slots.default?.({\n data: unref(dataForm)!.data,\n column: _formColumn,\n dataForm: unref(dataForm),\n }) || null;\n\n if (!children && _component) {\n const FormColumnComponent = toRaw(_component);\n\n children = (\n <FormColumnComponent\n {...unref(componentProps)}\n column={_formColumn}\n modelValue={value.value}\n disabled={unref(disabled)}\n onUpdate:modelValue={(v: any) => (value.value = v)}\n />\n );\n }\n\n return (\n <ElFormItem\n prop={_formColumn.name}\n label={unref(label)}\n required={_formColumn.required}\n labelWidth={props.labelWidth}\n style={unref(itemStyle)}\n >\n {children}\n </ElFormItem>\n );\n };\n },\n});\n","import DataFormItem from \"./data-form-item\";\n\nexport const MKDataFormItem = DataFormItem;\nexport default MKDataFormItem;\n\nexport * from \"./data-form-item-options\";\n","import {\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport {\n ElForm,\n FormItemRule,\n FormRules,\n FormContext,\n} from \"element-plus\";\nimport { formProps } from \"./form-options\";\nimport { DataFormType, FormColumn } from \"@maketribe/dm\";\nimport MKDataFormItem from \"../../data-form-item\";\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\n\nlet uid = 0;\n\nexport default defineComponent({\n name: \"MKForm\",\n props: formProps,\n setup(props, { slots }) {\n const formUID = uid++;\n\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const formEl = ref<FormContext | null>(null);\n\n const dataForm = computed(\n () => props.dataForm ?? dataFormContext!.dataForm\n );\n\n const data = computed(() => unref(dataForm).data as any);\n\n const columns = computed(() =>\n unref(dataForm)\n .getColumns()\n .filter((column) => column.visible)\n );\n\n // 验证规则\n const rules = computed(() => {\n const rules: FormRules = {};\n\n for (const column of unref(columns)) {\n if (column.required && !column.rules.find((rule) => rule.required)) {\n rules[column.name] = [\n {\n required: column.required,\n message: `请录入${column.label}.`,\n },\n ];\n }\n let componentRules: FormItemRule[] = props.rules?.[column.name] || [];\n\n if (!Array.isArray(componentRules)) {\n componentRules = [componentRules];\n }\n\n if (column.rules.length) {\n rules[column.name] = [\n ...((rules[column.name] as FormItemRule[]) || []),\n ...column.rules,\n ...componentRules,\n ];\n }\n }\n\n return rules;\n });\n\n // 描述宽度 不计算明细的\n const labelWidth = computed(() => {\n return (\n props.labelWidth ||\n Math.max.apply(\n null,\n columns.value\n .filter((column) => column.visible)\n .filter((column) => column.componentInfo !== \"MKFormDetail\")\n .map((item: FormColumn) => {\n // + 8 像素只是预留 必填 * 号的宽度位置 12 像素是label的padding\n return item.label.length * 16 + 8 + 12;\n })\n )\n );\n });\n\n const labelPosition = computed<any>(() => props.labelPosition);\n\n const disabled = computed(() => unref(dataForm).disabled);\n\n onMounted(() => {\n watch(\n dataForm,\n (dataForm, _, onCleanup) => {\n unref(dataForm).formModels.push({\n id: formUID,\n validate: async () => {\n return unref(formEl)?.validateField() ?? false;\n },\n reset: () => {\n unref(formEl)?.resetFields();\n },\n clearValidate: () => {\n unref(formEl)?.clearValidate();\n },\n });\n\n const disposable = dataForm.dataFormTypeChangeEvent.on(\n async ({ dataFormType }) => {\n if (dataFormType !== DataFormType.NONE) {\n // 测试下来 需要两次nextTick才能清除验证\n await nextTick();\n await nextTick();\n\n dataForm.clearValidate();\n }\n }\n );\n\n onCleanup(() => {\n const index = dataForm.formModels.findIndex(\n (formModel) => formModel.id === formUID\n );\n\n if (index === -1) {\n return;\n }\n\n dataForm.formModels.splice(index, 1);\n\n disposable.dispose();\n });\n },\n { immediate: true }\n );\n });\n\n return () => {\n if (!unref(dataForm).initd) {\n return null;\n }\n\n let children: any = slots.default?.();\n\n if (!children) {\n children = unref(columns) .map((column) => {\n\n if (!column.name) { return null; }\n\n return (\n slots[`col-${column.name}`]?.() || (\n column.componentInfo === \"MKFormDetail\" ?\n <MKDataFormItem\n label={column.label}\n labelWidth=\"0px\"\n labelPosition=\"top\"\n key={column.name}\n name={column.name}\n />\n :\n <MKDataFormItem\n key={column.name}\n name={column.name}\n v-slots={{ default: slots[`col-${column.name}-content`] }}\n />\n )\n );\n });\n }\n\n if (!unref(data)) { return null; }\n\n return (\n <ElForm\n validateOnRuleChange={false}\n {...props}\n ref={formEl}\n model={unref(data)}\n rules={unref(rules)}\n disabled={unref(disabled)}\n labelWidth={unref(labelWidth)}\n labelPosition={unref(labelPosition)}\n >\n {children}\n </ElForm>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Form from \"./form\";\n\nexport const MKForm = withInstall(Form);\n\nexport default MKForm;\n","import { ExtractPropTypes } from \"vue\";\nimport { FormItemRule, formProps } from \"element-plus\";\n\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataForm } from \"@maketribe/dm\";\n\nexport const formViewProps = buildProps({\n rules: { type: Object },\n labelWidth: { type: String },\n labelPosition: { type: String },\n dataForm: { type: DataForm<any>, required: true },\n mode: { type: String, default: \"form\" },\n} as const);\n\nexport type FormViewProps = ExtractPropTypes<typeof formViewProps>;\n\nexport const formViewEmits = {};\n\nexport const FormViewEmits = typeof formViewEmits;\n","<script lang=\"ts\" setup>\n\ndefineOptions({ name: \"MKPagePanel\" })\n\nimport { MKSvgIcon } from \"../../basic/SvgIcon\";\n\nconst route = useRoute()\n\nconst props = defineProps({\n loading:{ type:Boolean ,default:false},\n title:{ type:String ,default:\"\"},\n iconName:{ type:String ,default:\"\"}\n})\n\nconst title = computed(()=>props.title || route.meta.title)\nconst iconName = computed(()=>props.iconName || route.meta.icon)\n\n\n</script>\n\n<template>\n <div class=\"flex flex-col h-[100%]\" v-loading=\"loading\">\n <slot name=\"header\">\n <el-page-header class=\" bg-[#fff] p-[10px]\" :icon=\"null\">\n <template #title>\n <div class=\"flex items-center\">\n <slot name=\"back\"></slot>\n <slot name=\"title\">\n <h3 class=\"color-[var(--el-text-color-regular)] ml-2 flex items-center\">\n <MKSvgIcon v-if=\"iconName\" :name=\"iconName\" class=\"mr-2\"/>\n {{title}}\n </h3>\n </slot>\n </div>\n </template>\n <template #content>\n <slot name=\"tools\">\n </slot>\n </template>\n <template #extra>\n <slot name=\"extra\"></slot>\n </template>\n <template #default v-if=\"$slots['header-content']\">\n <slot name=\"header-content\"></slot>\n </template>\n </el-page-header>\n </slot>\n <slot name=\"body\">\n <div class=\"bg-white m-2 flex-1 overflow-y-auto\">\n <slot></slot>\n </div>\n </slot>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport PagePanel from \"./index.vue\";\nexport const MKPagePanel = withInstall(PagePanel);\nexport default MKPagePanel;\n","import { computed, defineComponent, inject, unref,Fragment } from \"vue\";\nimport { ElButton, ElCard, ElScrollbar } from \"element-plus\";\nimport { formViewProps } from \"./form-view-options\";\nimport { I18n } from \"@maketribe/locale\";\nimport {DataFormType} from \"@maketribe/dm\";\nimport MKForm from \"../form\";\nimport { DATA_FORM_CONTEXT_KEY } from \"../../token\";\nimport MKPagePanel from \"../../../../layouts/PagePanel\"\nimport MKSvgIcon from \"../../../../basic/SvgIcon\"\n\nexport default defineComponent({\n name: \"MKFormView\",\n props: formViewProps,\n setup(props, { slots }) {\n\n const dataFormContext = inject(DATA_FORM_CONTEXT_KEY);\n\n const dataForm = computed(\n () => props.dataForm ?? dataFormContext!.dataForm\n );\n\n const isUpdateForm = computed(()=> unref(dataForm).getDataFormType() == DataFormType.UPDATE)\n const isChange = computed(() => unref(dataForm).isChanged);\n // 页面表单的样式\n const pageFormStyle = computed(() => {\n // dataForm.value?.getColumns().some(item=>item.componentInfo == \"MKFormDetail\" && item.visible) ? \"\" :\n return \"max-width:700px\"\n })\n\n // 路由\n const route = useRoute();\n\n const handleSave = async () => {\n await unref(dataForm)?.simpleSubmit();\n };\n\n const handleCancel = () => {\n unref(dataForm).cancel();\n };\n\n return () => {\n\n // 保存按钮\n const saveBtn = <ElButton\n type=\"primary\"\n onClick={handleSave}\n disabled={!unref(isChange)}\n loading={!unref(unref(dataForm).allowSubmit)}\n >\n { unref(isUpdateForm) ? I18n.instance.translate(\"mk.dataForm.saveButton\") : I18n.instance.translate(\"mk.dataForm.addButton\")}\n </ElButton>\n\n return (\n props.mode === \"page\" ?\n <MKPagePanel v-slots={{\n header:()=> {\n return <el-page-header class={\" bg-[#fff] p-[10px]\"} icon={null} v-slots={{\n title: () => {\n return <div class=\"flex flex-items-center\">\n <ElButton onClick={handleCancel} text style={{padding:\"8px\"}}>\n <MKSvgIcon name=\"ep:arrow-left-bold\" class=\"m-r-1\"/>\n {I18n.instance.translate(\"mk.dataForm.backButton\")}\n </ElButton>\n <h3 style=\"color: var(--el-text-color-regular);\" class={\"m-l-2 flex-items-center\"}>\n {route.meta.title}\n </h3>\n </div>\n },\n extra: () => {\n return <Fragment>\n {slots[\"footer-button\"]?.()}\n {saveBtn}\n </Fragment>\n }\n }}>\n </el-page-header>\n }\n }}>\n <div class={\"w-full h-full bg-[rgb(242,242,242)] p-2\"}>\n <ElScrollbar class=\"w-full h-full\" >\n <MKForm class={\"p-6 m-[auto] bg-white\"} style={unref(pageFormStyle)}\n labelPosition={props.labelPosition}\n rules={props.rules}\n labelWidth={props.labelWidth}\n dataForm={props.dataForm}\n v-slots={slots}\n />\n </ElScrollbar>\n </div>\n </MKPagePanel>\n : <ElCard class=\"mk-form-view\" shadow=\"never\">\n <div class=\"mk-form-view__main\">\n <ElScrollbar>\n <MKForm\n labelPosition={props.labelPosition}\n rules={props.rules}\n labelWidth={props.labelWidth}\n dataForm={props.dataForm}\n v-slots={slots}\n />\n </ElScrollbar>\n </div>\n <div class=\"mk-form-view__footer\">\n {slots[\"footer-button\"]?.()}\n {saveBtn}\n <ElButton onClick={handleCancel}>\n {I18n.instance.translate(\"mk.dataForm.cancelButton\")}\n </ElButton>\n </div>\n </ElCard>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport \"./form-view.scss\"\nimport FormView from \"./form-view\";\n\nexport const MKFormView = withInstall(FormView);\n\nexport default MKFormView;\n","<script setup lang=\"ts\">\nimport {dataFormEmits, dataFormProps} from \"./data-form-options\";\nimport {DataForm, FormColumn} from \"@maketribe/dm\";\nimport {Disposable, Event} from \"@maketribe/utils\";\nimport {DATA_FORM_CONTEXT_KEY} from \"./token\";\nimport {MKFormView} from \"./views\";\nimport {unref} from \"vue\";\n\ndefineOptions({name: \"MKDataForm\"})\n\nconst props = defineProps(dataFormProps);\nconst emit = defineEmits(dataFormEmits);\n\nlet _dataForm: DataForm | null = null;\n\nconst dataFormEl: Ref<HTMLElement | null> = ref(null);\n\nconst createDataForm = () => {\n const dataForm = new DataForm({\n name: props.name!,\n primaryKey: props.primaryKey,\n interfaceURL: {\n load: props.loadInterfaceURL || \"\",\n add: props.addInterfaceURL || \"\",\n update: props.updateInterfaceURL || props.addInterfaceURL || \"\",\n },\n });\n\n const columns = props.columns.map((column) => new FormColumn(column));\n\n dataForm.setColumns(columns);\n\n return dataForm;\n};\n\nconst dataForm = computed(() => {\n\n if (props.dataForm instanceof DataForm) {\n return props.dataForm;\n }\n\n if (!_dataForm) {\n _dataForm = reactive(createDataForm()) as DataForm;\n }\n\n return _dataForm;\n});\n\n// loading\nconst loading = computed(() => unref(dataForm).loading);\n\n// 表单变化的时候\nwatch(dataForm, async (dataForm, _, onCleanup) => {\n\n await dataForm.init();\n\n if (unref(dataForm).autoReset) {\n unref(dataForm).reset();\n }\n\n const disposable = new Disposable();\n\n const events = Object.keys(dataForm)\n .filter((key) => dataForm[key as keyof DataForm] instanceof Event)\n .map((key) => ({\n eventName: key\n .replace(/Event$/, \"\")\n .replace(/[A-Z]/g, (match) => `-${match.toLocaleLowerCase()}`),\n event: dataForm[key as keyof DataForm]! as Event,\n }));\n\n for (const item of events.filter(\n (event) => event.eventName in dataFormEmits\n )) {\n disposable.register(\n // @ts-ignore\n item.event.on((event: any) => {\n // @ts-ignore\n emit(item.eventName, event);\n })\n );\n }\n\n onCleanup(() => {\n disposable.dispose();\n });\n\n emit(\"changeDataForm\", dataForm);\n }, {immediate: true});\n\nprovide(DATA_FORM_CONTEXT_KEY, reactive({dataForm, el: dataFormEl}));\n\n// 表单视图渲染函数\nconst FormViewRender =(props:any,options:any)=>{\n return unref(dataForm).render(props,options) || h(MKFormView,{ ...props },options.slots);\n};\n\n</script>\n\n<template>\n <div class=\"mk-data-form\" :class=\"{page:mode==='page'}\" v-loading=\"loading\" ref=\"dataFormEl\">\n <slot v-bind=\"props\" :dataForm=\"dataForm\">\n <FormViewRender v-bind=\"props\" :mode=\"mode\" :labelPosition=\"labelPosition\" :dataForm=\"dataForm\"/>\n </slot>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n.mk-data-form {\n :deep(.el-card) {\n display: flex;\n flex-direction: column;\n height: 100%;\n\n .el-car__body {\n height: 0;\n flex: 1;\n }\n }\n\n &.page{\n height: 100%;\n width: 100%;\n }\n}\n</style>\n","import { ExtractPropTypes, computed, inject, unref } from \"vue\";\nimport { DATA_FORM_ITEM_CONTEXT_KEY } from \"../token\";\nimport { FormColumn } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const columnProps = buildProps({\n column: { type: FormColumn, required: true },\n} as const);\n\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>;\n\nexport function useFormItem() {\n const dataFormItemContext = inject(DATA_FORM_ITEM_CONTEXT_KEY);\n const column = computed(() => unref(dataFormItemContext)?.column ?? null);\n\n const value = computed({\n get: () => {\n const _column = unref(column);\n\n if (!_column) {\n return;\n }\n\n return _column.getValue();\n },\n set: (v: any) => {\n const _column = unref(column);\n\n if (!_column) {\n return;\n }\n\n _column.setValue(v);\n },\n });\n\n const disabled = computed(() => unref(column)?.disabled ?? false);\n\n return { column, value, disabled };\n}\n","import { withInstall } from \"@maketribe/utils\";\nimport DataForm from \"./data-form.vue\";\nimport MKDataFormItem from \"./data-form-item\";\n\nexport const MKDataForm = withInstall(DataForm, {\n MKDataFormItem,\n});\nexport default MKDataForm;\n\nexport * from \"./data-form-options\";\nexport * from \"./data-form-item\";\nexport * from \"./views\";\nexport * from \"./composables\";\n\n// export * from \"./components\";\n","import { ExtractPropTypes } from \"vue\";\nimport { ColumnOptions, DataTable } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const dataTableProps = buildProps({\n dataTable: { type: DataTable<any>, required: true },\n selection: { type: Boolean, default: false },\n name: { type: String },\n mode: { type: String, default: \"table\" },\n primaryKey: { type: String },\n pageSize: { type: Number },\n interfaceURL: { type: Object },\n listInterfaceURL: { type: String },\n deleteInterfaceURL: { type: String },\n autoLoad: { type: Boolean, default: true },\n columns: { type: Array<ColumnOptions>, default: () => [] },\n enableQueryParams: { type: Boolean, default: false },\n} as const);\n\nexport type DataTableProps = ExtractPropTypes<typeof dataTableProps>;\n\nexport const dataTableEmits = {\n changeDataTable: (dataTable: any) => dataTable instanceof DataTable,\n};\n\nexport const DataTableEmits = typeof dataTableEmits;\n","import { get } from \"lodash-es\";\nimport { ExtractPropTypes, computed } from \"vue\";\nimport { TableColumn } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport type ColumnEventData = { row: any; column: TableColumn; index: number };\n\nexport const columnProps = buildProps({\n row: { type: Object, required: true },\n column: { type: TableColumn, required: true },\n index: { type: Number, required: true },\n} as const);\n\nexport type ColumnProps = ExtractPropTypes<typeof columnProps>;\n\nexport const useColumn = (props: {\n row: Record<string, any>;\n column: TableColumn;\n}) => {\n const value = computed(() => get(props.row, props.column.name));\n\n return { value };\n};\n","import { DataTable } from \"@maketribe/dm\";\nimport { aesDecrypt, aesEncrypt, Disposable, Event } from \"@maketribe/utils\";\nimport { Ref, unref, watch } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { MSAppClient } from \"../../../../core\";\nimport { debounce, isEmpty } from \"lodash-es\";\n\n/**\n * 使用数据表页面查询参数\n * @param dataTable\n */\nexport const useQueryParams = (dataTable: Ref<DataTable>) => {\n\n const route = useRoute();\n const router = useRouter();\n\n watch(dataTable,(dataTable, _, onCleanup) => {\n\n const disposable = new Disposable();\n\n disposable.register(\n dataTable.afterInitdEvent.on(() => {\n if (!dataTable.isEnableQueryParams) {\n return;\n }\n\n const event = disposable.register(Event.combine([\n dataTable.paginationChangeEvent,\n dataTable.dataFilter.beforeSearchEvent,\n ])\n );\n\n event.on(debounce(([paginationEvent]) => {\n\n const pagination = paginationEvent?.pagination ?? null;\n const params = dataTable.dataFilter.getParams()\n\n const query: Record<string, any> = {};\n\n if (pagination) {\n Object.assign(query, {\n ...route.query,\n // currentPage: pagination.currentPage,\n // pageSize: pagination.pageSize,\n });\n }\n\n const hasParams =\n Reflect.ownKeys(params).filter(\n (key) => params[key as string] != null\n ).length > 0;\n\n if (hasParams) {\n query.params = aesEncrypt(params, MSAppClient.instance!.appID);\n }\n\n router.replace({ query: !isEmpty(query) ? query : {} });\n })\n );\n\n const query = unref(router.currentRoute).query;\n\n try {\n\n const paramsString = query.params as string;\n\n if (paramsString) {\n\n const params = aesDecrypt(paramsString,MSAppClient.instance!.appID);\n\n dataTable.dataFilter.setParams(params);\n }\n } catch (e) {}\n\n const currentPage = Number.parseInt(query.currentPage as string);\n const pageSize = Number.parseInt(query.pageSize as string);\n\n if (!Number.isNaN(currentPage) && !Number.isNaN(pageSize)) {\n dataTable.setPagination({ currentPage, pageSize });\n }\n })\n );\n\n onCleanup(() => disposable.dispose());\n },\n { immediate: true }\n );\n};\n","import { InjectionKey } from \"vue\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport interface DataTableContext {\n dataTable: DataTable;\n el: HTMLElement | null\n}\n\nexport const DATA_TABLE_CONTEXT_KEY: InjectionKey<DataTableContext> = Symbol(\n \"dataTableContextKey\"\n);\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport const dataTablePaginationProps = buildProps({\n dataTable: {\n type: DataTable<any>,\n },\n} as const);\n\nexport type DataTablePaginationProps = ExtractPropTypes<\n typeof dataTablePaginationProps\n>;\n","import { computed, defineComponent, inject, unref } from \"vue\";\nimport { dataTablePaginationProps } from \"./data-table-pagination-options\";\nimport MKPagination from \"../../basic/Pagination\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../data-table/token\";\n\nexport default defineComponent({\n name: \"MKDataTablePagination\",\n props: dataTablePaginationProps,\n setup(props) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTable = computed(\n () => props.dataTable ?? dataTableContext!.dataTable\n );\n\n return () => {\n return (\n <MKPagination\n currentPage={unref(dataTable).currentPage}\n pageSize={unref(dataTable).pageSize}\n pageSizes={unref(dataTable).pageSizes}\n total={unref(dataTable).totalRecCount}\n onUpdate:currentPage={(v) => unref(dataTable).pageTo(v)}\n onUpdate:pageSize={(v) => {\n unref(dataTable).setPageSize(v);\n unref(dataTable).load();\n }}\n />\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport DataTablePagination from \"./data-table-pagination\";\n\nexport const MKDataTablePagination = withInstall(DataTablePagination);\nexport default DataTablePagination;\n\nexport * from \"./data-table-pagination-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { TableColumn } from \"@maketribe/dm\";\n\nexport const dataTableColumnProps = buildProps({\n column: { type: TableColumn, required: true },\n row: { type: null },\n index: { type: Number, required: true },\n} as const);\n\nexport type DataTableColumnProps = ExtractPropTypes<\n typeof dataTableColumnProps\n>;\n","import { computed, defineComponent, inject, toRaw, unref } from \"vue\";\nimport { useTableColumnComponent } from \"../../../../composables\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../token\";\nimport { dataTableColumnProps } from \"./data-table-column-options\";\n\nexport default defineComponent({\n name: \"MKDataTableColumn\",\n props: dataTableColumnProps,\n setup(props) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTable = computed(() => dataTableContext?.dataTable ?? null);\n\n const tableColumn = computed(() => props.column);\n\n const { component, componentProps } = useTableColumnComponent(\n tableColumn,\n dataTable\n );\n\n return () => {\n const TableColumnComponent = toRaw(unref(component));\n\n if (!TableColumnComponent) {\n return null;\n }\n\n return (\n <TableColumnComponent\n {...unref(componentProps)}\n column={unref(tableColumn)}\n index={props.index}\n row={props.row}\n />\n );\n };\n },\n});\n","import DataTableColumnComponent from \"./data-table-column\";\n\nexport const MKDataTableColumn = DataTableColumnComponent;\n\nexport default MKDataTableColumn;\n\nexport * from \"./data-table-column-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTable } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const tableProps = buildProps({\n dataTable: {\n type: DataTable<any>,\n },\n getList: {\n type: Function,\n default: (dataTable: DataTable<any>): any[] => dataTable.getList(),\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n treeProps: {\n type: Object,\n default: () => ({ children: \"children\", hasChildren: \"hasChildren\" }),\n },\n load: {\n type: Function,\n default: null,\n },\n rowKey: {\n type: String,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type TableProps = ExtractPropTypes<typeof tableProps>;\n","import {\n computed,\n defineComponent,\n onMounted,\n ref,\n Ref,\n unref,\n watch,\n nextTick,\n inject,\n} from \"vue\";\nimport { Column, ElEmpty, ElTable, ElTableColumn } from \"element-plus\";\nimport { isEqual } from \"lodash-es\";\nimport MKDataTableColumn from \"../../data-table-column\";\nimport { tableProps } from \"./table-options\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\nimport Sortable from \"sortablejs\";\nimport { OrderType } from \"@maketribe/request\";\n\nexport default defineComponent({\n name: \"MKTable\",\n props: tableProps,\n setup(props, { slots }) {\n const treeProps = computed(() => {\n return props.treeProps;\n });\n\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTableEl = computed(() => dataTableContext?.el ?? null);\n\n const tableEl: Ref<InstanceType<typeof ElTable> | null> = ref(null);\n\n const dataTable = computed(\n () => props.dataTable ?? dataTableContext!.dataTable\n );\n\n const rowKey = computed(() => props.rowKey || unref(dataTable).primaryKey);\n\n const list = computed(() => props.getList(unref(dataTable)));\n\n const selectionColumn = computed(() => unref(dataTable).selectionColumn);\n\n type SortChangeEvent = { column: Column; prop: string; order: string };\n\n const handleSortChange = ({ column, prop, order }: SortChangeEvent) => {\n let orderType: OrderType | null = null;\n\n if (order === \"descending\") {\n orderType = OrderType.DESC;\n } else if (order === \"ascending\") {\n orderType = OrderType.ASC;\n }\n\n unref(dataTable).sorter.setColumnSort(prop, orderType);\n };\n\n let allowChangeSelection = true;\n\n const handleSelectionChange = (items: any[]) => {\n if (allowChangeSelection) {\n unref(dataTable).setSelection(\n items.map((item) => item[unref(dataTable).primaryKey])\n );\n }\n };\n\n onMounted(() => {\n const _tableEl = unref(tableEl)!;\n\n watch(list, (list, _, onCleanup) => {\n onCleanup(\n watch(\n computed(() => unref(dataTable).getSelection()),\n async (selections) => {\n const primaryKey = unref(dataTable).primaryKey;\n\n const tableSelections = _tableEl\n .getSelectionRows()\n .map((item: any) => item[primaryKey])\n .sort();\n\n if (isEqual(selections, tableSelections)) {\n return;\n }\n\n allowChangeSelection = false;\n\n _tableEl.clearSelection();\n\n await nextTick();\n\n const selectedRows = list.filter((item: any) =>\n selections.includes(item[primaryKey])\n );\n\n for (var item of selectedRows) {\n _tableEl.toggleRowSelection(item, true);\n }\n\n allowChangeSelection = true;\n },\n {\n immediate: true,\n }\n )\n );\n });\n\n watch(\n dataTableEl,\n (el, _, onCleanup) => {\n if (!el) {\n return;\n }\n var sortableInstance = Sortable.create(el.querySelector(\"tbody\")!, {\n handle: \".mk-column-sort__drag\",\n animation: 300,\n onEnd: (event) => {\n const newIndex = event.newIndex!;\n const oldIndx = event.oldIndex!;\n\n if (oldIndx === newIndex) {\n return;\n }\n\n const sourceItem = unref(dataTable).getList()[oldIndx];\n let dropItem = unref(dataTable).getList()[newIndex];\n let sortAction = oldIndx > newIndex ? 1 : 2;\n\n unref(dataTable).moveTarget(sourceItem, dropItem, sortAction);\n\n },\n });\n\n onCleanup(() => {\n sortableInstance.destroy();\n });\n },\n { immediate: true }\n );\n });\n\n return () => {\n const columns = unref(dataTable)\n .getColumns()\n .filter((column) => column.visible && column.name)\n .map((column) => {\n const columnProps: Record<string, any> = {\n prop: column.name,\n label: column.label,\n width: column.width,\n minWidth: column.minWidth,\n fixed: column.fixed,\n align: column.align || \"center\",\n reserveSelection: true,\n type: column.type || \"default\",\n sortable: column.sortable,\n };\n\n if (!column.visible) {\n return null;\n }\n\n return (\n slots[`col-${column.name}`]?.() ?? (\n <ElTableColumn\n {...columnProps}\n v-slots={{\n default: (scope: {\n $index: number;\n row: any;\n column: any;\n }) => {\n let children = slots[`col-${column.name}-content`]?.({\n $index: scope.$index,\n row: scope.row,\n column: column,\n dataTable: unref(dataTable),\n });\n\n if (children) {\n return children;\n }\n\n return (\n <MKDataTableColumn\n column={column}\n row={scope.row}\n index={scope.$index}\n />\n );\n },\n }}\n />\n )\n );\n });\n\n return (\n <ElTable\n data={unref(list)}\n row-key={unref(rowKey)}\n onSort-change={handleSortChange}\n ref={(el: any) =>\n (tableEl.value = el as InstanceType<typeof ElTable>)\n }\n show-overflow-tooltip\n border\n stripe\n lazy={props.lazy}\n load={props.load as any}\n v-slots={{ empty: () => slots.empty?.() || <ElEmpty /> }}\n onSelection-change={handleSelectionChange}\n defaultExpandAll={props.defaultExpandAll}\n >\n {unref(selectionColumn).visible ? (\n <ElTableColumn\n type={unref(selectionColumn).type ?? \"selection\"}\n width={unref(selectionColumn).width}\n fixed={unref(selectionColumn).fixed}\n />\n ) : null}\n {columns}\n </ElTable>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Table from \"./table\";\n\nexport const MKTable = withInstall(Table);\n\nexport default MKTable;\n\nexport * from \"./table-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { DataTable } from \"@maketribe/dm\";\n\nexport const tableViewProps = buildProps({\n dataTable: { type: DataTable<any> },\n mode: { type: String,default:\"table\" },\n showHeader: { type: Boolean, default: true },\n} as const);\n\nexport type TableViewProps = ExtractPropTypes<typeof tableViewProps>;\n\nexport const tableViewEmits = {};\n\nexport const TableViewEmits = typeof tableViewEmits;\n","import { computed, defineComponent, toRaw, unref } from \"vue\";\nimport { TableHeaderItem } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\nimport { useRenderInfoComponent } from \"../../../../../../composables\";\nimport { useGlobalConfig } from \"../../../../../basic/ConfigProvider\";\n\nconst InnerTableHeaderItem = defineComponent({\n name: \"InnerTableHeaderItem\",\n props: buildProps({\n tableHeaderItem: {\n type: TableHeaderItem,\n required: true,\n },\n }),\n setup(props) {\n\n return () => {\n\n const tableHeaderItem = computed(() => props.tableHeaderItem!);\n\n const defaultDataTableHeaderComponents = useGlobalConfig(\n \"dataTableHeaderComponents\"\n );\n\n const components = computed(\n () => defaultDataTableHeaderComponents.value!\n );\n\n const { component, componentProps } = useRenderInfoComponent(\n tableHeaderItem,\n components\n );\n\n var TableHeaderItemComponent = toRaw(unref(component))!;\n\n return <TableHeaderItemComponent {...unref(componentProps)} />;\n };\n },\n});\n\nexport default defineComponent({\n name: \"MKTableHeaderItem\",\n props: buildProps({\n tableHeaderItem: {\n type: TableHeaderItem,\n },\n }),\n setup(props, { slots }) {\n return () => {\n\n let children: any = slots.default?.();\n\n if (!children && props.tableHeaderItem) {\n return (\n <InnerTableHeaderItem tableHeaderItem={props.tableHeaderItem} />\n );\n }\n else if(children){\n return <span class=\"mk-table-view__header-item\">{children}</span>\n }\n\n return null\n };\n },\n});\n","import { computed, defineComponent, inject, unref,Fragment } from \"vue\";\nimport TableHeaderItem from \"./header-item\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\nimport MKSvgIcon from \"../../../../../basic/SvgIcon\"\n\nexport default defineComponent({\n name: \"MKTableHeader\",\n props:{\n mode: { type: String,default:\"table\" },\n },\n setup(props, { slots }) {\n\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY)!;\n\n const dataTable = computed(() => dataTableContext.dataTable)\n\n const tableHeader = computed(() => unref(dataTable)?.header!);\n\n const leftArea = computed(() => {\n var items = unref(tableHeader)?.leftArea ?? [];\n\n return items.filter((item) => item.predicate());\n });\n const rightArea = computed(() => {\n var items = unref(tableHeader)?.rightArea ?? [];\n\n return items.filter((item) => item.predicate());\n });\n\n // 路由\n const route = useRoute();\n\n return () => {\n\n const leftItems = unref(leftArea).filter(item=>item.componentInfo !== \"MKClassifySearch\").map((item) => (\n <TableHeaderItem tableHeaderItem={item} />\n ));\n\n const classifySearchItems = unref(leftArea).filter(item=>item.componentInfo === \"MKClassifySearch\").map((item) => (\n <TableHeaderItem class={props.mode == \"page\" ? \"p-4 bg-white m-2 m-b-0\" : \"p-1\"} tableHeaderItem={item} />\n ));\n\n const rightItems = unref(rightArea).map((item) => (\n <TableHeaderItem tableHeaderItem={item} />\n ));\n\n return (\n props.mode == \"page\" ?\n <Fragment>\n <el-page-header class={\" bg-[#fff] p-[10px]\"} icon={null} v-slots={{\n title: () => {\n return slots['header-title']?.() ?? <h3 style=\"color: var(--el-text-color-regular);\" class={\"m-l-2 flex items-center\"}>\n {route.meta.icon ? <MKSvgIcon name={route.meta.icon} class={\"mx-2\"} /> : null}\n <span>{route.meta.title}</span>\n </h3>\n },\n extra: () => {\n return <Fragment>\n {rightItems}\n {slots[\"header-tools\"]?.()}\n </Fragment>\n },\n content: () => {\n return <div class={\"flex items-center\"}>\n {leftItems}\n </div>\n },\n default: slots['header-main']\n }}>\n </el-page-header>\n {classifySearchItems}\n </Fragment>\n\n :\n <div class=\"mk-table-view__header\">\n <div class=\"mk-table-view__header-main\">\n {slots['header-title']?.()}\n {leftItems}\n {classifySearchItems}\n {slots['header-main']?.()}\n </div>\n <div class=\"mk-table-view__header-tools\">\n {rightItems}\n {slots[\"header-tools\"]?.()}\n </div>\n </div>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport TableHeader from \"./header\";\nimport TableHeaderItem from \"./header-item\";\n\nexport const MKTableHeader = TableHeader;\nexport const MKTableHeaderItem = withInstall(TableHeaderItem);\n","import { computed, defineComponent, inject, unref, watch } from \"vue\";\nimport { ElCard } from \"element-plus\";\nimport { DataTree } from \"@maketribe/dm\";\n\nimport { MKDataTablePagination } from \"../../../data-table-pagination\";\nimport { MKTable } from \"../table\";\nimport MKPagePanel from \"../../../../layouts/PagePanel\"\nimport { tableViewProps } from \"./table-view-options\";\nimport { MKTableHeader } from \"./header\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTableView\",\n props: tableViewProps,\n setup(props, { slots }) {\n\n // 数据表格上下文\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n // 数据表格\n const dataTable = computed(\n () => props.dataTable ?? dataTableContext!.dataTable\n );\n\n // 翻页\n const pageSizes = computed(() => unref(dataTable).pageSizes);\n\n //树形表格不需要显示分页\n const isTree = computed(() => unref(dataTable) instanceof DataTree);\n\n return () => {\n\n // 翻页器组件\n const pagination =\n slots.pagination?.({ dataTable: unref(dataTable) }) ||\n (unref(pageSizes).length && !unref(isTree) ? (\n <MKDataTablePagination dataTable={unref(dataTable)} />\n ) : null);\n\n // 渲染的插槽\n const renderSlots: Record<string, any> = {};\n\n if (props.showHeader) {\n // 表头\n renderSlots.header = () => <MKTableHeader mode={props.mode} v-slots={slots} />;\n }\n\n return (\n props.mode === \"page\" ?\n <MKPagePanel v-slots={renderSlots}>\n <div class={\"p-4 flex flex-col w-full h-full\"}>\n {slots.default?.({ dataTable: unref(dataTable) }) || (\n <MKTable class={\"flex-1\"} dataTable={unref(dataTable)} />\n )}\n {pagination}\n </div>\n </MKPagePanel>\n : <ElCard class=\"mk-table-view\" v-slots={renderSlots} shadow=\"never\">\n {slots.default?.({ dataTable: unref(dataTable) }) || (\n <MKTable dataTable={unref(dataTable)} />\n )}\n {pagination}\n </ElCard>\n );\n };\n },\n});\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const classifySearchItemProps = buildProps({\n modelValue: { type: null },\n label: { type: String },\n labelWidth: { type: String },\n multiple: {\n type: Boolean,\n default: false,\n },\n options: {\n type: Array,\n },\n formatOptions: {\n type: Function,\n default: (item: any) => {\n const value = item.value ?? item.id ?? item.name;\n const label = item.label ?? item.desc ?? item.title ?? item.name;\n\n return { value, label };\n },\n },\n});\n\nexport type ClassifySearchItemProps = ExtractPropTypes<\n typeof classifySearchItemProps\n>;\n\nexport const classifySearchItemEmits = {\n \"update:model-value\": (modelValue: any) => true,\n};\n\nexport type ClassifySearchItemEmits = typeof classifySearchItemEmits;\n","import { defineComponent, computed, unref, ComputedRef } from \"vue\";\nimport { ElTag } from \"element-plus\";\nimport {\n classifySearchItemProps,\n classifySearchItemEmits,\n} from \"./classify-search-item-options\";\n\nexport type DataOptionItem = { value: any; label: string };\n\nexport default defineComponent({\n name: \"MKTableClassifySearchItem\",\n props: classifySearchItemProps,\n emits: classifySearchItemEmits,\n setup(props, { emit }) {\n const modelValue = computed({\n get: () => {\n if (props.multiple) {\n return Array.isArray(props.modelValue)\n ? props.modelValue\n : props.modelValue\n ? [props.modelValue]\n : [];\n }\n\n return props.modelValue;\n },\n set: (v: any) => emit(\"update:model-value\", v),\n });\n\n const handleClick = (item: any) => {\n let _modelValue = unref(modelValue);\n if (props.multiple) {\n const index = _modelValue.findIndex((v: any) => v === item.value);\n\n if (index > -1) {\n _modelValue.splice(index, 1);\n } else {\n _modelValue.push(item.value);\n }\n\n modelValue.value = _modelValue;\n\n return;\n }\n\n modelValue.value = item?.value ?? null;\n };\n\n const options: ComputedRef<DataOptionItem[]> = computed(() => {\n if (Array.isArray(props.options)) {\n return props.options.map((item) => props.formatOptions(item));\n }\n\n return [];\n });\n\n const labelStyle: ComputedRef<any> = computed(() => {\n if (props.labelWidth) {\n return { width: props.labelWidth };\n }\n\n return {};\n });\n\n return () => {\n const title = props.label ? (\n <div class=\"mk-classify-search-item-title\" style={unref(labelStyle)}>\n {props.label}\n </div>\n ) : null;\n\n const tags = unref(options).map((item) => {\n const isSelect = props.multiple\n ? unref(modelValue).includes(item.value)\n : item.value === unref(modelValue);\n\n return (\n <ElTag\n key={item.value}\n effect={isSelect ? \"dark\" : \"light\"}\n onClick={() => handleClick(item)}\n disable-transitions\n >\n {item.label}\n </ElTag>\n );\n });\n\n return (\n <div class=\"mk-classify-search-item\">\n {title}\n <div class=\"mk-classify-search-item__conditions\">{tags}</div>\n </div>\n );\n };\n },\n});\n","import TableClassifySearchItem from \"./classify-search-item\";\n\nexport const MKTableClassifySearchItem = TableClassifySearchItem;\n\nexport default TableClassifySearchItem;\n","import { Fragment, computed, defineComponent, inject, unref } from \"vue\";\nimport MKTableClassifySearchItem from \"./classify-search-item\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../../token\";\nimport \"./index.scss\"\n\nexport default defineComponent({\n name: \"MKTableClassifySearch\",\n setup(props, { slots }) {\n const dataTable = inject(DATA_TABLE_CONTEXT_KEY)?.dataTable;\n\n const classifySearch = computed(() => dataTable?.classifySearch ?? null);\n\n return () => {\n let children: any = slots.default?.();\n\n const _classifySearch = unref(classifySearch);\n\n if (!children && _classifySearch) {\n if (!_classifySearch.getClassifySearchItems().length) {\n return;\n }\n\n children = (\n <Fragment>\n {_classifySearch.getClassifySearchItems().map((item) => (\n <MKTableClassifySearchItem\n label={item.label}\n labelWidth={_classifySearch.labelWidth}\n modelValue={_classifySearch.getParam(item.name)}\n onUpdate:model-value={(v: any) => {\n _classifySearch.setParam(item.name, v);\n }}\n multiple={item.multiple}\n options={item.options}\n formatOptions={item.formatOptions || undefined}\n />\n ))}\n </Fragment>\n );\n }\n\n return <div class=\"mk-classify-search\">{children}</div>;\n };\n },\n});\n","import TableClassifySearch from \"./classify-search\";\n\nexport const MKTableClassifySearch = TableClassifySearch;\n\nexport default TableClassifySearch;\n\nexport * from \"./classify-search-item\";\n","import { withInstall } from \"@maketribe/utils\";\nimport TableView from \"./table-view\";\nimport \"./table-view.scss\"\nexport const MKTableView = withInstall(TableView);\n\nexport default MKTableView;\n\nexport * from \"./classify-search\";\nexport * from \"./header\";\n","<script setup lang=\"ts\">\nimport {dataTableProps} from \"./data-table-options\";\nimport {DataTable, TableColumn} from \"@maketribe/dm\";\nimport {computed, provide, reactive, ref, Ref, unref, watch,getCurrentInstance} from \"vue\";\nimport {useQueryParams} from \"./composables\";\nimport {DATA_TABLE_CONTEXT_KEY} from \"./token\";\nimport MKTableView from \"./views/table-view\";\n\ndefineOptions({name: \"MKDataTable\"})\n\nconst props = defineProps(dataTableProps)\nconst dataTableEl: Ref<HTMLElement | null> = ref(null);\n\n// 数据表模型\nconst dataTable = computed(() => {\n\n if (props.dataTable instanceof DataTable) {\n return props.dataTable;\n }\n else if (!!props.name) {\n return reactive(\n new DataTable({\n name: props.name,\n primaryKey: props.primaryKey,\n pageSize: props.pageSize ?? 20,\n interfaceURL: {\n list: props.listInterfaceURL || \"\",\n delete: props.deleteInterfaceURL || \"\",\n },\n })\n ) as DataTable;\n }\n throw new Error(\"dataTable is not null\")\n\n});\n\n// 加载状态\nconst loading = computed(() => unref(dataTable).loading);\n\n// 是否启用查询参数\nwatch(computed(() => props.enableQueryParams),(enableQueryParams) => {\n if (enableQueryParams) {\n unref(dataTable).enableQueryParams();\n }\n else {\n unref(dataTable).disableQueryParams();\n }\n},{immediate: true});\n\n// 初始化\nconst initialize = async (dataTable:DataTable)=>{\n\n let columns = unref(dataTable).getColumns();\n\n const extractColumnConfig = props.columns.filter(\n config =>columns.findIndex((column) => column.name === config.name) === -1\n );\n\n const extractColumn = extractColumnConfig.map(\n (config) => new TableColumn({visible: true, ...config})\n );\n\n columns = [...extractColumn, ...columns];\n\n let sortedColumns: TableColumn[] = [];\n for (const columnConfig of props.columns) {\n const column = columns.find(\n (column) => column.name === columnConfig.name\n )!;\n\n sortedColumns.push(column);\n }\n\n const _columns = columns.filter(\n (column) => sortedColumns.findIndex((item) => item.name === column.name) === -1\n );\n\n sortedColumns = [...sortedColumns, ..._columns];\n\n dataTable.setColumns(sortedColumns);\n\n await dataTable.init();\n\n if (props.autoLoad) { await dataTable.load(); }\n\n}\n\n// 监听变化\nwatch(dataTable,initialize, {immediate: true});\n\n// 使用条件\nuseQueryParams(dataTable);\n\n// 监听筛选变化\nwatch(computed(() => unref(dataTable).dataFilter),(dataFilter) => {\n unref(dataTable).afterInitdEvent.on(() => {\n if (dataFilter.getColumns().length === 0) {\n dataFilter.setReady();\n }\n });\n },\n{immediate: true});\n\n// 表格视图渲染函数\nconst TableViewRender = (props:any,options:any)=>{\n return unref(dataTable).render(props,options) || h(MKTableView,{ ...props },options.slots)\n};\n\n// 注入\nprovide(DATA_TABLE_CONTEXT_KEY, reactive({dataTable, el: dataTableEl}));\n\n</script>\n\n<template>\n <div class=\"mk-data-table\" :class=\"{page:mode=='page'}\" v-loading=\"loading\" ref=\"dataTableEl\">\n <slot :dataTable=\"dataTable\">\n <TableViewRender :dataTable=\"dataTable\" :mode=\"mode\"/>\n </slot>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.mk-data-table {\n :deep(.el-card) {\n display: flex;\n flex-direction: column;\n height: 100%;\n\n .el-car__body {\n height: 0;\n flex: 1;\n }\n }\n\n &.page{\n height: 100%;\n width: 100%;\n\n :deep(.el-page-header__main) {\n border-top:none;\n margin-top:10px\n }\n }\n}\n</style>\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTree } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const tableTreeProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n} as const);\n\nexport type TableTreeProps = ExtractPropTypes<typeof tableTreeProps>;\n","import { computed, defineComponent, inject, onMounted, unref } from \"vue\";\nimport { TreeNode } from \"element-plus\";\nimport { tableTreeProps } from \"./table-tree-options\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { MKTable } from \"../table\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTableTree\",\n props: tableTreeProps,\n setup(props, { slots }) {\n\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(() => props.dataTree ?? (dataTableContext!.dataTable as DataTree));\n\n const treeProps = computed(() => {\n return { children: unref(dataTree).props.children, hasChildren: \"hasChildren\" };\n });\n\n const lazy = computed(() => unref(dataTree).lazy);\n\n const handleLoad = async (\n row: DataTreeNode,\n node: TreeNode,\n resolve: Function\n ) => {\n if (!unref(dataTree).lazy) {\n resolve(row.children);\n return;\n }\n\n await row.load();\n\n resolve(row.children);\n };\n\n const getList = (dataTree: DataTree<any>) => {\n return dataTree.children;\n };\n\n return () => {\n return (\n <MKTable\n dataTable={unref(dataTree)}\n getList={getList}\n rowKey=\"primaryValue\"\n tree-props={unref(treeProps)}\n load={handleLoad}\n lazy={unref(lazy)}\n v-slots={slots}\n default-expand-all={props.defaultExpandAll}\n />\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport TableTree from \"./table-tree\";\nimport \"./index.scss\"\n\nexport const MKTableTree = withInstall(TableTree);\n\nexport default MKTableTree;\n\nexport * from \"./table-tree-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const treeProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n currentNodeKey: { type: String, default: \"\" },\n draggable: { type: Boolean, default: false },\n filterNodeMethod: { type: Function },\n defaultExpandAll: { type: Boolean, default: false },\n allowSelectContainer: { type: Boolean, default: true },\n} as const);\n\nexport type TreeProps = ExtractPropTypes<typeof treeProps>;\n\nexport const treeEmits = {\n nodeClick: (node: DataTreeNode<any>) => true,\n};\n\nexport type TreeEmits = typeof treeEmits;\n","import {\n Fragment,\n computed,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n ref,\n unref,\n watch,\n} from \"vue\";\nimport { ElButton, ElTree } from \"element-plus\";\nimport type { NodeDropType } from \"element-plus/es/components/tree/src/tree.type\";\nimport type { DragEvents } from \"element-plus/es/components/tree/src/model/useDragNode\";\nimport type Node from \"element-plus/es/components/tree/src/model/node\";\nimport { DataTree, DataTreeNode } from \"@maketribe/dm\";\nimport { treeEmits, treeProps } from \"./tree-options\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\n\nexport default defineComponent({\n name: \"MKTree\",\n props: treeProps,\n emits: treeEmits,\n setup(props, { emit }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\n );\n\n const treeRef = ref<typeof ElTree | null>(null);\n\n const rootNodes = computed(() => unref(dataTree).rootNodes);\n\n const currentNodeKey = computed(\n () => (props.currentNodeKey || unref(dataTree).getSelection()[0]) ?? \"\"\n );\n\n onMounted(() => {\n watch(\n currentNodeKey,\n (currentNodeKey) => {\n unref(treeRef)?.setCurrentKey(currentNodeKey || null);\n },\n { immediate: true }\n );\n });\n\n unref(dataTree).afterLoadEvent.on(async () => {\n await nextTick();\n\n unref(treeRef)?.setCurrentKey(unref(currentNodeKey) || null);\n });\n\n const handleAdd = (dataTreeNode?: DataTreeNode) => {\n unref(dataTree).addRecord(\n dataTreeNode ? { pid: dataTreeNode.data.id } : {}\n );\n };\n\n const handleEdit = (dataTreeNode: DataTreeNode) => {\n unref(dataTree).editRecord(dataTreeNode.data);\n };\n\n const handleDelete = async (dataTreeNode: DataTreeNode) => {\n unref(dataTree).deleteRecord(dataTreeNode.data);\n };\n\n const handleLoad = async (node: Node, resolve: Function) => {\n if (node.level === 0) {\n return;\n }\n\n if (!unref(dataTree).lazy) {\n resolve(node.data.children);\n return;\n }\n\n const dataTreeNode = node.data as DataTreeNode;\n\n await dataTreeNode.load();\n\n resolve(dataTreeNode.children);\n };\n\n const filter = (value: any) => {\n unref(treeRef)?.filter(value);\n };\n\n const handleCurrentChange = (dataTreeNode: DataTreeNode | null,node: Node | null) => {\n if (!dataTreeNode) {\n return;\n }\n\n const _dataTree = unref(dataTree);\n\n if (!props.allowSelectContainer && !dataTreeNode.isLeaf) {\n const current = _dataTree.getSelection()[0] ?? null;\n\n unref(treeRef)?.setCurrentKey(current);\n\n return;\n }\n\n _dataTree.setSelection([dataTreeNode.data[_dataTree.primaryKey]]);\n };\n\n // 没作用\n // watch(()=>props.currentNodeKey,()=>{\n // treeRef.value?.getCurrentKey(props.currentNodeKey)\n // console.log(\"props.currentNodeKey\",props.currentNodeKey)\n // },{ immediate:true })\n\n const handleNodeDrop = (\n draggingNode: Node,\n dropNode: Node,\n dropType: NodeDropType,\n event: DragEvents\n ) => {\n // console.log(draggingNode, dropNode);\n unref(dataTree).handleNodeDrop(\n draggingNode.data! as any,\n dropNode.data! as any,\n dropType\n );\n };\n\n const handleNodeClick = (node: DataTreeNode<any>) => {\n emit(\"nodeClick\", node);\n };\n\n return {\n treeRef,\n innerDataTree: dataTree,\n rootNodes,\n handleAdd,\n handleEdit,\n handleDelete,\n handleLoad,\n filter,\n handleCurrentChange,\n handleNodeDrop,\n handleNodeClick,\n };\n },\n render() {\n const {\n defaultExpandAll,\n filterNodeMethod,\n innerDataTree,\n rootNodes,\n currentNodeKey,\n handleAdd,\n handleEdit,\n handleDelete,\n handleLoad,\n handleCurrentChange,\n handleNodeDrop,\n handleNodeClick,\n $slots,\n } = this;\n\n return (\n <ElTree\n props={{ children: \"children\", isLeaf: \"isLeaf\" }}\n defaultExpandAll={defaultExpandAll}\n ref=\"treeRef\"\n class=\"mk-data-tree\"\n highlight-current\n data={rootNodes}\n lazy\n current-node-key={currentNodeKey}\n filterNodeMethod={filterNodeMethod as any}\n nodeKey=\"primaryValue\"\n expand-on-click-node={false}\n load={handleLoad}\n onCurrent-change={handleCurrentChange}\n onNode-drop={handleNodeDrop}\n draggable={this.$props.draggable}\n onNode-click={handleNodeClick}\n v-slots={{\n default: (scope: any) => {\n let children = $slots.default?.(scope);\n\n if (children) {\n return children;\n }\n\n const { data } = scope;\n\n const label = data.data[innerDataTree.props.label];\n\n const main = $slots[\"node-main\"]?.(scope) || label;\n\n const tools = $slots[\"node-tools\"]?.(scope) || (\n <Fragment>\n {$slots[\"node-tools-prefix\"]?.(scope)}\n <ElButton type=\"primary\" link onClick={() => handleAdd(data)}>\n 添加\n </ElButton>\n <ElButton type=\"primary\" link onClick={() => handleEdit(data)}>\n 编辑\n </ElButton>\n <ElButton type=\"danger\" link onClick={() => handleDelete(data)}>\n 删除\n </ElButton>\n {$slots[\"node-tools-suffix\"]?.(scope)}\n </Fragment>\n );\n\n return (\n <div class=\"flex w-full py-2 justify-between\">\n <div>{main}</div>\n <div onClick={(e) => e.stopPropagation()}>\n {tools}\n </div>\n </div>\n );\n },\n }}\n />\n );\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Tree from \"./tree\";\n\nexport const MKTree = withInstall(Tree);\n\nexport default MKTree;\n\nexport * from \"./tree-options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { DataTree } from \"@maketribe/dm\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const treeViewProps = buildProps({\n dataTree: {\n type: DataTree<any>,\n },\n filterNodeMethod: {\n type: Function,\n },\n defaultExpandAll: { type: Boolean, default: true },\n} as const);\n\nexport type TreeViewProps = ExtractPropTypes<typeof treeViewProps>;\n","import { computed, defineComponent, inject, ref, unref, watch } from \"vue\";\nimport { ElButton, ElCard, ElInput } from \"element-plus\";\nimport { Search } from \"@element-plus/icons-vue\";\nimport { MKTree } from \"../tree\";\nimport { treeViewProps } from \"./tree-view-options\";\nimport { I18n } from \"@maketribe/locale\";\nimport { DATA_TABLE_CONTEXT_KEY } from \"../../token\";\nimport { DataTree } from \"@maketribe/dm\";\n\nexport default defineComponent({\n name: \"MKTreeView\",\n props: treeViewProps,\n setup(props, { slots }) {\n const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);\n\n const dataTree = computed(\n () => props.dataTree ?? (dataTableContext!.dataTable as DataTree)\n );\n\n const treeRef = ref<InstanceType<typeof MKTree>>();\n\n const searchInputValue = ref(\"\");\n watch(searchInputValue, (value) => {\n unref(treeRef)?.filter(value);\n });\n\n const filterNodeMethod = (value: string, data: any) => {\n if (typeof props.filterNodeMethod === \"function\") {\n return props.filterNodeMethod(value, data);\n }\n\n if (!searchInputValue.value) return true;\n\n return data.data[unref(dataTree).props.label].includes(\n searchInputValue.value\n );\n };\n\n const handleAdd = () => {\n unref(dataTree).addRecord();\n };\n\n return () => {\n const content = slots.default?.({ dataTree: props.dataTree }) || (\n <MKTree\n ref={\n ((component: InstanceType<typeof MKTree>) =>\n (treeRef.value = component)) as any\n }\n dataTree={unref(dataTree)}\n filterNodeMethod={filterNodeMethod}\n />\n );\n\n return (\n <ElCard shadow=\"never\" class=\"h-full\"\n v-slots={{\n header: () => {\n return (\n <div class=\"header-box\">\n <div class=\"header-box-main\">\n <ElInput\n modelValue={unref(searchInputValue)}\n clearable={true}\n onUpdate:modelValue={(v: string) =>\n (searchInputValue.value = v)\n }\n prefix-icon={Search}\n />\n </div>\n <div class=\"header-box-tools\">\n <ElButton onClick={handleAdd} type=\"primary\">\n {I18n.instance.translate(\"mk.dataTreePage.addButton\")}\n </ElButton>\n </div>\n </div>\n );\n },\n }}\n >\n {content}\n </ElCard>\n );\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport TreeView from \"./tree-view\";\n\nexport const MKTreeView = withInstall(TreeView);\n\nexport default MKTreeView;\n\nexport * from \"./tree-view-options\";\n","import { withInstall } from \"@maketribe/utils\";\nimport DataTable from \"./data-table.vue\";\nimport { MKDataTableColumn } from \"./data-table-column\";\n\nexport const MKDataTable = withInstall(DataTable, {\n MKDataTableColumn,\n});\n\nexport default MKDataTable;\n\nexport * from \"./data-table-column\";\nexport * from \"./data-table-options\";\n\nexport * from \"./views\";\n","<template>\n <div class=\"data-tree-list\">\n <div class=\"data-tree-list__header\" v-if=\"title\">\n <div class=\"flex-inline items-center justify-center gap-2\">\n <MKSvgIcon v-if=\"iconName\" :name=\"iconName\" />\n {{title}}\n </div>\n <el-switch v-if=\"useAction\" v-model=\"isDrag\" inline-prompt active-text=\"排序\" inactive-text=\"排序\" />\n </div>\n <div class=\"data-tree-list__body m-t-2\">\n\n <ElScrollbar style=\"height: 100%;\">\n <MKDataTable :autoLoad=\"autoLoad\" :data-table=\"dataTree\" highlight-current>\n <MKTree :data-tree=\"dataTree\" @nodeClick=\"selectPart\" defaultExpandAll :draggable=\"isDrag\" ref=\"treeRef\" :currentNodeKey=\"selectNodeId\" >\n <template #node-main=\"{ data }\">\n {{ data.data[dataItemDescFieldName??'name'] }}\n </template>\n <template #node-tools=\"{ data }\">\n <slot name=\"tools\" :data=\"data\">\n <el-dropdown v-if=\"useAction\">\n <ElIcon>\n <MoreFilled />\n </ElIcon>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :icon=\"Edit\" @click=\"handleEditClick(data.data)\">编辑</el-dropdown-item>\n <el-dropdown-item :icon=\"Delete\" @click=\"handleDeleteClick(data.data)\">删除</el-dropdown-item>\n <el-dropdown-item v-if=\"data.data.cmsPartTypeId != 1\" :icon=\"Plus\"\n @click=\"handleAddClick(data.data)\">添加子项</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </slot>\n </template>\n </MKTree>\n </MKDataTable>\n </ElScrollbar>\n </div>\n </div>\n</template>\n<script setup lang='ts'>\nimport { ElMessageBox, ElScrollbar } from \"element-plus\"\nimport { Plus, Edit, Delete, MoreFilled } from \"@element-plus/icons-vue\";\nimport { watch, ref,onMounted } from \"vue\";\nimport { useI18n } from \"../../../composables\"\nimport { MKDataTable, MKTree } from \"../data-table\"\nimport { MKSvgIcon } from \"../../basic/SvgIcon\"\nimport { DataTreeNode,DataTree } from \"@maketribe/dm\";\n\ndefineOptions({ name: \"MKDataTreeList\" });\n\nconst treeRef = ref(null);\n\n// 配置选项\nconst props = defineProps({\n title:{ type: String, default: \"\" },\n iconName:{ type: String },\n dataTree:{ type:DataTree<any>,required:true },\n autoLoad:{ type:Boolean , default:true },\n dataItemDescFieldName:{ type: String, default: \"name\" },\n curSelectId:{ type:String },\n useAction:{ type:Boolean, default:false },\n});\n\n\n// 事件定义\nconst emit = defineEmits([\"edit\", \"add\", \"deleteSuccessfully\", \"select\"]);\n\nconst i18n = useI18n()!;\n\nconst isDrag = ref(false)\n\nconst selectNodeId = ref(props.curSelectId);\n\nwatch(()=>props.curSelectId,()=>{\n selectNodeId.value = props.curSelectId\n})\n\n/**\n * 设置默认选中节点\n */\nconst setDefaultSelectNode = (callback?:any)=>{\n\n const list:any[] = props.dataTree.getList();\n\n if (list.length > 0) {\n\n //默认选择第一条\n if(!selectNodeId.value){ selectNodeId.value = list[0][props.dataTree.primaryKey]; }\n\n for(let i = 0;i < list.length;i++){\n\n let item = list[i]\n\n if(item[props.dataTree.primaryKey] == selectNodeId.value){\n callback && callback(item);\n break;\n }\n\n item.children?.forEach((child:any)=>list.push(child))\n }\n }\n}\n\nonMounted(()=>{\n setDefaultSelectNode();\n // 数据加载完之后默认选中第一项\n props.dataTree.afterLoadEvent.on(() => {\n setDefaultSelectNode((item:any)=>emit(\"select\", item))\n });\n});\n\n\n/**\n * 点击添加栏目按钮\n * @param item\n */\nconst handleAddClick = (item: any) => {\n emit(\"add\", item);\n}\n\n/**\n * 编辑栏目\n * @param item\n */\nconst handleEditClick = (item: any) => {\n emit(\"edit\", item);\n}\n/**\n * 删除栏目\n * @param item\n */\nconst handleDeleteClick = async (item: any) => {\n\n // 删除提示\n const isConfirm = await ElMessageBox.confirm(\n i18n.translate(\"mk.dataTablePage.deleteMessage\"),\n i18n.translate(\"mk.dataTablePage.deleteTitle\"),\n { type: \"warning\" }\n )\n\n if (isConfirm) {\n\n // 删除并刷新数据\n const result = await props.dataTree.deleteAfterRefresh(item.id);\n\n if (result.data.code == 200) {\n emit('deleteSuccessfully', item)\n }\n\n }\n}\n\n/**\n * 选择栏目\n * @param data\n */\nconst selectPart = (data: DataTreeNode) => {\n emit(\"select\", data.data);\n}\n\ndefineExpose({ dataTree:props.dataTree });\n\n</script>\n<style scoped lang=\"scss\">\n@import \"index\";\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport DataTreeList from \"./index.vue\";\n\nexport const MKDataTreeList = withInstall(DataTreeList);\nexport default MKDataTreeList;\n","<template>\n <MKDataTable class=\"h-[100%] overflow-y-auto\" :auto-load=\"true\" :data-table=\"dataTable\" highlight-current>\n <ElCollapse accordion>\n <ElCollapseItem v-for=\"(item,index) in dataList\" :name=\"item[dataTable.primaryKey]\">\n <template #title>\n <div class=\"w-[100%] flex justify-between\">\n <b class=\"font-size-[16px] p-l-[10px] flex flex-items-center\">\n {{item[dataItemDescFieldName]}}\n <slot name=\"subtitle\" :data=\"item\" :index=\"index\" :rows=\"dataList\"></slot>\n </b>\n <div @click.stop>\n <slot name=\"extra\" :data=\"item\" :index=\"index\" :rows=\"dataList\"></slot>\n </div>\n </div>\n </template>\n <slot :data=\"item\"></slot>\n </ElCollapseItem>\n </ElCollapse>\n </MKDataTable>\n</template>\n<script setup>\nimport { ElCollapse,ElCollapseItem } from \"element-plus\"\nimport { ref,computed } from \"vue\";\nimport { MKDataTable } from \"@maketribe/ms-app\"\nimport { DataTable } from \"@maketribe/dm\";\n\ndefineOptions({ name: \"MKDataGroupPanel\" });\n\n// 配置选项\nconst props = defineProps({\n dataTable:{ type: DataTable },\n dataItemDescFieldName:{ type: String,default: \"desc\" },\n});\n\n// 数据列表\nconst dataList = computed(()=>props.dataTable.getList());\n\n// 事件定义\nconst emit = defineEmits([]);\n\n// 是否开启拖拽排序\nconst isOpenDragSort = ref(false)\n\n</script>\n<style scoped lang=\"scss\">\n@import \"index\";\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport DataGroupPanel from \"./index.vue\";\nexport const MKDataGroupPanel = withInstall(DataGroupPanel);\nexport default MKDataGroupPanel;\n","import { defineComponent, reactive, computed, unref, ref } from \"vue\";\nimport { ElButton, ElPopover } from \"element-plus\";\nimport { MKDataForm, MKForm } from \"../../data-model\";\nimport { MsMaterialGroupForm, MsMaterialGroupTree } from \"../../../dataviews/ms-material\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport default defineComponent({\n name: \"MKMaterialFormPopover\",\n props: buildProps({\n materialGroupTree: {\n type: MsMaterialGroupTree,\n required: true,\n },\n materialGroupForm: {\n type: MsMaterialGroupForm,\n required: true,\n },\n } as const),\n setup(props, { slots }) {\n const visible = ref(false);\n\n const loading = computed(() => props.materialGroupForm.loading);\n\n const handleConfirmClick = async () => {\n await props.materialGroupForm.simpleSubmit();\n\n props.materialGroupTree.load();\n\n visible.value = false;\n };\n\n const handleCancelClick = () => {\n visible.value = false;\n };\n\n return () => {\n return (\n <ElPopover\n visible={unref(visible)}\n onUpdate:visible={(v: boolean) => (visible.value = v)}\n title=\"添加素材分组\"\n effect=\"light\"\n placement=\"right\"\n trigger=\"click\"\n width=\"320\"\n v-slots={{\n reference: () => slots.default?.(),\n }}\n >\n <div>\n <MKDataForm data-form={props.materialGroupForm}>\n <MKForm />\n </MKDataForm>\n <div class=\"mk-material-list__group-form-footer\">\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton\n type=\"primary\"\n loading={unref(loading)}\n onClick={handleConfirmClick}\n >\n 保存\n </ElButton>\n </div>\n </div>\n </ElPopover>\n );\n };\n },\n});\n","import {\n computed,\n defineComponent,\n nextTick,\n onBeforeUnmount,\n reactive,\n ref,\n Ref,\n unref,\n} from \"vue\";\nimport {\n ElButton,\n ElIcon,\n ElMessage,\n ElMessageBox,\n ElScrollbar,\n ElTooltip,\n} from \"element-plus\";\nimport { Plus, Edit, Delete } from \"@element-plus/icons-vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport {\n MsMaterialGroupForm,\n MsMaterialGroupNode,\n MsMaterialGroupTree,\n} from \"../../../dataviews/ms-material\";\nimport { MKDataTable, MKTree } from \"../../data-model\";\nimport MaterialGroupFormPopover from \"./MaterialGroupFormPopover\";\nimport { I18n } from \"@maketribe/locale\";\n\nexport default defineComponent({\n name: \"MKMaterialGroup\",\n props: buildProps({\n materialGroupTree: {\n type: MsMaterialGroupTree,\n required: true,\n },\n } as const),\n setup(props) {\n\n const treeRef: Ref<typeof MKTree | null> = ref(null);\n\n const materialGroupForm = reactive(\n new MsMaterialGroupForm()\n ) as MsMaterialGroupForm;\n\n const materialGroupTree = computed(() => props.materialGroupTree);\n\n onBeforeUnmount(() => {\n materialGroupForm.dispose();\n });\n\n const handleAddClick = async (parent?: MsMaterialGroupNode) => {\n materialGroupForm.addRecord();\n\n await nextTick();\n\n materialGroupForm.setData({\n ...materialGroupForm.data,\n parentGroupId: parent?.id || null,\n } as MsMaterialGroupNode);\n };\n\n const handleEditClick = (item: MsMaterialGroupNode) => {\n materialGroupForm.editRecord(item);\n };\n\n const handleDeleteClick = async (item: MsMaterialGroupNode) => {\n const isConfirm = await ElMessageBox.confirm(\n I18n.instance.translate(\"mk.dataTablePage.deleteMessage\"),\n I18n.instance.translate(\"mk.dataTablePage.deleteTitle\"),\n { type: \"warning\" }\n ).then(\n () => true,\n () => false\n );\n\n if (!isConfirm) {\n return;\n }\n\n const result = await unref(materialGroupTree).deleteAfterRefresh(item);\n\n if (result.data.code !== 200) {\n ElMessage.error(result.data.msg);\n return;\n }\n };\n\n return () => {\n return (\n <div class=\"mk-material-group\">\n <div class=\"mk-material-group__header\">\n <div class=\"mk-material-group__header-title\">素材分组</div>\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <ElButton\n onClick={() => handleAddClick()}\n icon={Plus}\n size=\"small\"\n type=\"primary\"\n />\n </MaterialGroupFormPopover>\n </div>\n\n <div class=\"mk-material-group__main\">\n <ElScrollbar height=\"100%\">\n <MKDataTable dataTable={unref(materialGroupTree)} highlight-current autoLoad={false}>\n <MKTree\n dataTree={unref(materialGroupTree)}\n allowSelectContainer={false}\n ref={((el: any) => (treeRef.value = el)) as any}\n v-slots={{\n \"node-tools\": ({ data }: any) => {\n return (\n <div class=\"mk-material-group__tools\"\n onClick={(e) => {\n e.preventDefault();\n }}\n >\n <ElTooltip content=\"添加\">\n <span class=\"mk-material-group__tools-item\">\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <span\n onClick={(e) => handleAddClick(data.data)}\n >\n <ElIcon>\n <Plus />\n </ElIcon>\n </span>\n </MaterialGroupFormPopover>\n </span>\n </ElTooltip>\n <ElTooltip content=\"编辑\">\n <span class=\"mk-material-group__tools-item\">\n <MaterialGroupFormPopover\n materialGroupTree={unref(materialGroupTree)}\n materialGroupForm={materialGroupForm}\n >\n <span\n onClick={(e) => handleEditClick(data.data)}\n >\n <ElIcon>\n <Edit />\n </ElIcon>\n </span>\n </MaterialGroupFormPopover>\n </span>\n </ElTooltip>\n <ElTooltip content=\"删除\">\n <span class=\"mk-material-group__tools-item\">\n <span\n onClick={() => handleDeleteClick(data.data)}\n >\n <ElIcon>\n <Delete />\n </ElIcon>\n </span>\n </span>\n </ElTooltip>\n </div>\n );\n },\n }}\n />\n </MKDataTable>\n </ElScrollbar>\n </div>\n </div>\n );\n };\n },\n});\n","<template>\n <ElCard\n :class=\"['mk-material-item', isSelected ? 'is-selected' : '']\"\n shadow=\"never\"\n @click.capture=\"handleClick\"\n >\n <div class=\"mk-material-item__tools\" v-if=\"!selectable\">\n <div class=\"mk-material-item__tools-item\">\n <ElDropdown>\n <ElButton circle type=\"primary\">\n <MKSvgIcon name=\"ri:more-fill\"/>\n </ElButton>\n <template #dropdown>\n <ElDropdownItem v-if=\"currentMaterialTypeValue === 1\" @click=\"handleCutClick\">\n 裁切\n </ElDropdownItem>\n <ElDropdownItem v-if=\"currentMaterialTypeValue === 2\" @click=\"handleDownloadClick\">\n 下载\n </ElDropdownItem>\n <ElDropdownItem @click=\"handleDeleteClick\">删除</ElDropdownItem>\n <ElDropdownItem @click=\"handleMoveClick\">移动分组</ElDropdownItem>\n <ElDropdownItem @click=\"handleCopyClick(true)\">复制绝对路径</ElDropdownItem>\n <ElDropdownItem @click=\"handleCopyClick(false)\">复制相对路径</ElDropdownItem>\n </template>\n </ElDropdown>\n </div>\n </div >\n\n <div class=\"mk-material-item__preview\">\n <MaterialComponent :src=\"material.path\" :viewTools=\"!selectable\" />\n </div>\n <div class=\"mk-material-item__title\">{{ material.desc }}</div>\n </ElCard>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRaw} from \"vue\";\nimport {Messager} from \"@maketribe/dm\";\nimport type {MsMaterial} from \"../../../dataviews/ms-material\";\nimport {MKSvgIcon} from \"../../basic/SvgIcon\";\n\nconst props = defineProps({\n materialTable: {type: null, required: true},\n material: {type: Object, required: true},\n selectable: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"click\", \"move\", \"cut\", \"download\"]);\n\nconst isSelected = computed(() =>\n props.materialTable.getSelection().includes(props.material.id)\n);\n\nconst currentMaterialTypeValue = computed(\n () => props.materialTable.currentMaterialType?.value ?? null\n);\n\nconst MaterialComponent = computed(() => {\n const component =\n props.materialTable.resolveMaterialComponent(\n props.material as MsMaterial\n ) || props.materialTable.materialComponents.resolveComponent(\"MKFileView\")!;\n\n return component ? toRaw(component.component) : null;\n});\n\nconst handleClick = (event: MouseEvent) => {\n emit(\"click\", event);\n};\n\nconst handleDeleteClick = () => {\n props.materialTable.deleteRecord(props.material);\n};\n\nconst handleMoveClick = () => {\n emit(\"move\", props.material);\n};\n\nconst handleCutClick = () => {\n emit(\"cut\", props.material);\n};\n\nconst handleDownloadClick = () => {\n emit(\"download\", props.material);\n};\n\nconst handleCopyClick = (isAbsolute: boolean) => {\n let copyText = props.material.path\n if (isAbsolute) {\n copyText = location.origin + props.material.path\n }\n\n //兼容性判断\n if (navigator.clipboard === undefined) {\n //通过input标签进行复制\n const input = document.createElement(\"input\");\n input.value = copyText;\n document.body.appendChild(input);\n input.select();\n document.execCommand(\"Copy\");\n document.body.removeChild(input);\n } else {\n navigator.clipboard.writeText(copyText);\n }\n Messager.success({message: \"复制成功\"});\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.mk-material-item {\n cursor: pointer;\n :deep(.el-card__body) {\n padding: 0 !important;\n }\n --el-card-padding: 0;\n position: relative;\n display: inline-block;\n width: 200px;\n border: 1px solid #e4e7ed;\n border-radius: 0;\n\n &__preview {\n position: relative;\n height: 150px;\n background: #f5f7fa;\n user-select: none;\n user-drag: none;\n }\n\n &__title {\n font-size: 12px;\n padding: 5px 10px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &__tools {\n z-index: 1;\n position: absolute;\n display: flex;\n visibility: hidden;\n right: 5px;\n top: 5px;\n font-size: 12px;\n\n &-item {\n .mk-svg-icon {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n width: 24px;\n height: 24px;\n background-color: white;\n\n &:hover {\n background-color: #fbfbfb;\n }\n }\n }\n }\n\n &:hover {\n border-color: rgb(64, 169, 255, 0.4);\n\n .mk-material-item__tools {\n visibility: visible;\n }\n }\n\n &.is-selected {\n border-color: rgb(64, 169, 255);\n background-color: rgb(64, 169, 255);\n color: #fff;\n }\n}\n</style>\n","import {\n computed,\n defineComponent,\n Fragment,\n onBeforeUnmount,\n onMounted,\n reactive,\n unref,\n watch,\n} from \"vue\";\nimport {base64ToBlob,fileSelect} from \"@maketribe/utils\";\nimport {DvOpt, WebFileUpload} from \"@maketribe/request\";\nimport {Dialoger, Messager} from \"@maketribe/dm\";\nimport {ElButton, ElScrollbar} from \"element-plus\";\nimport {materialListProps} from \"./options\";\nimport MaterialGroup from \"./MaterialGroup\";\nimport { MsMaterial, MsMaterialTable, MsMaterialType } from \"../../../dataviews/ms-material\";\nimport { MKSvgIcon } from \"../../basic/SvgIcon\"\nimport {ImageCropper} from \"../../basic/ImageCropper\";\nimport {\n MKDataTable,\n MKDataTablePagination,\n} from \"../../data-model\";\nimport MaterialItem from \"./MaterialItem.vue\";\n\nconst RATIO_OPTIONS = [\n {\n value: \"1\",\n label: \"1:1\",\n width: 1,\n height: 1,\n },\n {\n value: \"2\",\n label: \"2:1\",\n width: 2,\n height: 1,\n },\n {\n value: \"3\",\n label: \"4:3\",\n width: 4,\n height: 3,\n },\n {\n value: \"3\",\n label: \"16:9\",\n width: 16,\n height: 9,\n },\n];\n\nexport default defineComponent({\n name: \"MKMaterialList\",\n props: materialListProps,\n emits:[\"select\"],\n async setup(props,{ emit }) {\n\n\n const webFileUpload = new WebFileUpload();\n\n const defaultMaterialTable = reactive(new MsMaterialTable({ pageSize:50 }));\n\n const materialTable = computed(() => (props.materialTable ?? defaultMaterialTable) as MsMaterialTable);\n\n const loading = computed(() => unref(materialTable).loading);\n\n const materialTypes = computed(() => unref(materialTable).getMaterialTypes());\n\n const currentMaterialType = computed(() => unref(materialTable).currentMaterialType);\n\n const currentMaterialTypeId = computed(() => unref(currentMaterialType)?.value ?? \"\");\n\n // 素材列表\n const materialList = computed(() => unref(materialTable).getList());\n\n onBeforeUnmount(() => {\n defaultMaterialTable.dispose();\n });\n\n // 挂载的时候\n onMounted(() => {\n\n // 素材表发生变化则重新监听事件\n watch(materialTable,(materialTable, _, onCleanup) => {\n\n // 初始化后的事件\n const disposable = materialTable.afterInitdEvent.on(() => {\n materialTable.setAllowMaterialTypeValues(props.allowMaterialTypeValues as MsMaterialType[\"value\"][]);\n });\n\n // 删除的事件\n const deleteDisposable = materialTable.deleteRecordEvent.on(async ({item}) => {\n if (await Dialoger.confirm({\n message: \"是否确认删除\",\n title: \"素材删除\",\n type: \"warning\",\n })) {\n materialTable.deleteAfterRefresh(item);\n }\n });\n\n onCleanup(() => {\n disposable.dispose()\n deleteDisposable.dispose();\n });\n },{immediate: true});\n\n // 素材类型发生变化的时候\n watch(computed(() => props.allowMaterialTypeValues),(allowMaterialTypeValues) => {\n unref(materialTable).setAllowMaterialTypeValues(allowMaterialTypeValues as MsMaterialType[\"value\"][]);\n });\n });\n\n // 选择素材\n materialTable.value.selectionChangeEvent.on(() => {\n const ids = materialTable.value.getSelection() as any[];\n emit(\"select\",materialTable.value.getList().filter(item => ids.includes(item.id)))\n })\n\n // 选择素材类型\n const handleMaterialTypeClick = (materialType: MsMaterialType) => {\n if (materialType.value === unref(currentMaterialTypeId)) {\n return;\n }\n\n unref(materialTable).setCurrentMaterialType(materialType);\n };\n\n // 点击素材项\n const handleMaterialItemClick = (event: MouseEvent,material: MsMaterial) => {\n if (!props.selectable) { return; }\n event.preventDefault();\n event.stopPropagation();\n unref(materialTable).setSelection([material.id]);\n };\n\n // 设置分组\n const handleMoveClick = (material: MsMaterial) => {\n Dialoger.dataFormDialog({\n recId: material.id,\n title: \"设置素材分组\",\n dataForm: unref(materialTable).materialForm,\n });\n };\n\n // 裁切处理函数\n const handleCutClick = async (material: MsMaterial) => {\n\n // 裁切选项\n const cropperResult = await ImageCropper({\n src: material.path,\n ratioOptions: RATIO_OPTIONS,\n });\n\n if (!cropperResult.isConfirm) { return; }\n\n const handleOverrideClick = async () => {\n try {\n\n const blob = base64ToBlob(cropperResult.data);\n\n const uploadResponse = await webFileUpload.upload(\n new File([blob], material.desc, {type: blob.type})\n );\n\n if (uploadResponse.data.code !== 200) {\n Messager.error({message: uploadResponse.data.msg});\n return;\n }\n\n const response = await DvOpt.createInstance({\n name: \"mk-material\",\n }).save({\n ...material,\n path: uploadResponse.data.data.path,\n });\n\n if (response.code !== 200) {\n Messager.error({message: response.msg});\n return;\n }\n\n unref(materialTable).load();\n } catch {\n Messager.error({message: \"网络异常\"});\n } finally {\n dialogInstance.destroy();\n }\n };\n\n const handleNewClick = async () => {\n try {\n const blob = base64ToBlob(cropperResult.data);\n\n const result = await unref(materialTable).upload.upload(\n new File([blob], material.desc, {type: blob.type})\n );\n\n if (result.data.code !== 200) {\n Messager.error({message: result.data.msg});\n return;\n }\n } catch {\n Messager.error({message: \"网络异常\"});\n } finally {\n dialogInstance.destroy();\n }\n };\n\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"提示\",\n width: \"400px\",\n onClose: handleCancelClick,\n body: () => \"修改已存在的素材。是新建新素材还是覆盖现有素材\",\n footer: () => {\n return (\n <Fragment>\n <ElButton type=\"danger\" onClick={handleOverrideClick}>\n 覆盖\n </ElButton>\n <ElButton type=\"primary\" onClick={handleNewClick}>\n 新建\n </ElButton>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n </Fragment>\n );\n },\n });\n };\n\n // 下载处理函数\n const handleDownload = () => {\n\n };\n\n // 上传\n const handleSelectFile = async ()=>{\n const file = await fileSelect({ accept:unref(currentMaterialType)?.accept});\n if(file){\n unref(materialTable).upload.upload(file)\n }\n }\n\n // 初始化\n // await unref(materialTable).init();\n\n return () => {\n\n const materialTypeVNodes = unref(materialTypes).map((materialType) => {\n\n const className = [ \"mk-material-list__type\", unref(currentMaterialTypeId) === materialType.value ? \"is-active\" : \"\", ];\n\n return (\n <div\n key={materialType.value}\n class={className}\n onClick={() => handleMaterialTypeClick(materialType)}\n >\n {materialType.label}\n </div>\n );\n });\n\n let currentMaterialTypeVNode: any = null;\n\n if (unref(currentMaterialType)) {\n currentMaterialTypeVNode = (\n <Fragment>\n <span class=\"mr-2\">\n {unref(currentMaterialType)!.label}大小不超过 {unref(currentMaterialType)!.limit} M\n </span>\n <ElButton type=\"primary\" onClick={handleSelectFile}>\n <MKSvgIcon name=\"ep:upload\" class=\"mr-2\"/>\n 选择{unref(currentMaterialType)!.label}\n </ElButton>\n </Fragment>\n );\n }\n\n const materialListVNodes = unref(materialList).map((material) => (\n <MaterialItem\n key={material.id}\n class=\"mk-material-list__item\"\n materialTable={unref(materialTable)}\n selectable={props.selectable}\n material={material}\n onMove={handleMoveClick}\n onCut={handleCutClick}\n onDownload={handleDownload}\n onClick={\n ((event: MouseEvent) =>\n handleMaterialItemClick(event, material)) as any\n }\n />\n ));\n\n return (\n <div class=\"mk-material-list\" v-loading={unref(loading)}>\n\n <MaterialGroup materialGroupTree={unref(materialTable).materialGroupTree}/>\n\n <div class=\"mk-material-list__main\">\n <div class=\"mk-material-list__header\">\n <div class=\"mk-material-list__header-left\">\n <div class=\"mk-material-list__types\">{materialTypeVNodes}</div>\n </div>\n <div class=\"mk-material-list__header-right\">\n {currentMaterialTypeVNode}\n </div>\n </div>\n\n <div class=\"mk-material-list__body\">\n <MKDataTable dataTable={unref(materialTable)} autoLoad={false}>\n <ElScrollbar height=\"100%\">\n <div class=\"mk-material-list__wrapper\">\n {materialListVNodes}\n </div>\n </ElScrollbar>\n <div class=\"mk-material-list__footer\">\n <MKDataTablePagination dataTable={unref(materialTable)}/>\n </div>\n </MKDataTable>\n </div>\n </div>\n </div>\n );\n };\n },\n});\n","import {withInstall} from \"@maketribe/utils\";\n\nimport \"./list.scss\"\nimport \"./group.scss\"\nimport MaterialList from \"./MaterialList\";\n\nexport const MKMaterialList = withInstall(MaterialList);\nexport default MKMaterialList;\nexport * from \"./options\";\n\n","import { withInstall } from \"@maketribe/utils\";\nimport AsyncComponentView from \"./index.vue\";\n\nexport const MKAsyncComponentView = withInstall(AsyncComponentView);\nexport default MKAsyncComponentView;\n","import {Fragment, h, onMounted, watch, ref, reactive, defineComponent, computed, unref} from 'vue'\nimport {Dialoger} from '@maketribe/dm'\nimport {\n ElButton, ElTabs, ElTabPane, ElInput, ElImage, ElIcon,\n ElForm, ElFormItem, ElRow, ElCol\n} from \"element-plus\";\nimport {fileSelect} from \"@maketribe/utils\"\nimport {WebFileUpload} from \"@maketribe/request\";\nimport {base64ToBlob, md5} from \"@maketribe/utils\";\nimport {Messager} from \"@maketribe/dm\";\nimport {Share, UploadFilled, Picture} from \"@element-plus/icons-vue\";\nimport {MKMaterialList} from \"../../../business/MaterialList\";\nimport {MKAsyncComponentView} from \"../../../layouts/AsyncComponentView\";\nimport {ImageCropper} from \"../../ImageCropper\"\n\n// 选择状态\nconst selectState = ref(\"select\");\n\n/**\n * 图片加载\n * @param src\n * @returns\n */\nexport const imageLoad = (src: string) => {\n // 加载文案\n return new Promise((resolve, reject) => {\n // 加载一下\n const image = new Image();\n const loadComplete = () => {\n resolve(image.src);\n }\n image.onload = () => loadComplete()\n image.onerror = reject\n image.src = src;\n if (image.complete) {\n loadComplete();\n }\n })\n}\n\n/**\n * 图片上传\n * @param src\n */\nexport const imageUpload = (src: string) => {\n\n // 上传\n const webFileUpload = new WebFileUpload();\n return new Promise((resolve, reject) => {\n\n if (src && src.indexOf(\"data:image/\") == 0) {\n\n // 开始上传\n const blob = base64ToBlob(src);\n\n // 上传\n webFileUpload.upload(\n new File(\n [blob],\n `${md5(Math.random().toString())}.${blob.type.toString().replace(\"image/\", \"\") || \"png\"}`,\n {type: blob.type}\n )\n ).then(result => {\n\n if (result.data.code !== 200) {\n Messager.error({message: result.data.msg});\n reject(new Error(result.data.msg));\n } else {\n resolve(result.data.data.path);\n }\n\n });\n } else {\n resolve(src);\n }\n })\n}\n\n/**\n * 图片编辑面板\n */\nconst ImageEditPanelComponent = defineComponent({\n name: 'ImageEditPanelComponent',\n props: ['attrs'],\n setup(props, {expose}) {\n\n const attrs = reactive(props.attrs)\n const margin = ref({t: 0, r: 0, b: 0, l: 0})\n\n watch(() => `${margin.value.t} ${margin.value.r} ${margin.value.b} ${margin.value.l}`, (v) => {\n attrs.margin = v;\n })\n\n watch(() => props.attrs, () => {\n\n let vals = props.attrs.margin.split(/[\\s]+/g);\n\n if (vals.length == 1 && vals[0]) {\n margin.value = {t: vals[0], r: vals[0], b: vals[0], l: vals[0]}\n } else if (vals.length == 2) {\n margin.value = {t: vals[0], r: vals[1], b: vals[0], l: vals[1]}\n } else if (vals.length == 3) {\n margin.value = {t: vals[0], r: vals[1], b: vals[2], l: vals[1]}\n } else if (vals.length == 4) {\n margin.value = {t: vals[0], r: vals[1], b: vals[2], l: vals[3]}\n }\n\n }, {immediate: true})\n\n // 素材选择事件处理函数\n const handleMaterialSelect = async (data:any) => {\n attrs.src = data[0]?.path ?? \"\";\n }\n\n // 选择图片\n const selectImage = async () => {\n\n const file = await fileSelect({accept: \"image/*\"});\n\n if (file) {\n\n const fileRender = new FileReader();\n fileRender.onload = async (data: any) => {\n attrs.src = data.target.result;\n\n }\n fileRender.readAsDataURL(file)\n }\n }\n\n // 图片类型素材\n const allowMaterialTypeValues = [1];\n\n // 导出可用的方法\n expose({\n getResult: () => {\n return {...attrs}\n },\n setSrc: (src: string) => {\n attrs.src = src\n }\n });\n\n // 是否显示过素材库面板\n const materialPanelVisible = ref(false);\n // 激活的tab\n const activeTabName = ref( \"l\");\n watch(activeTabName,(v:any)=>{ materialPanelVisible.value = materialPanelVisible.value ? true : v === \"m\" },{ immediate: true });\n\n return () => {\n\n // 图片预览\n const ImageView = <ElImage style=\"background: #dedede;width: 100%; height: 480px;margin-top:10px\" src={attrs.src}\n fit=\"contain\" v-slots={{\n error: () => {\n return <div style=\"\n font-size: 50px;\n display: flex;\n align-content: center;\n justify-content: center;\n align-items: center;\n height: 100%;\n \">\n <ElIcon><Picture/></ElIcon>\n </div>\n }\n }}>\n </ElImage>\n\n // 面板内容\n let panel = <ElTabs class=\"h-full\" v-model={activeTabName.value}>\n <ElTabPane label=\"本地选择\" name=\"l\" class=\"h-full overflow-y-auto\">\n <ElButton icon={UploadFilled} type=\"primary\" style=\"width: 100%\" onClick={selectImage}>\n 选择本地文件\n </ElButton>\n {ImageView}\n </ElTabPane>\n <ElTabPane label=\"素材库选择\" name=\"m\" class=\"h-full\">\n {\n unref(materialPanelVisible)?\n <MKAsyncComponentView>\n <MKMaterialList style={{height: \"100%\"}} selectable onSelect={handleMaterialSelect} allowMaterialTypeValues={allowMaterialTypeValues}/>\n </MKAsyncComponentView>\n : null\n }\n </ElTabPane>\n <ElTabPane label=\"网络图片\" name=\"n\" class=\"h-full overflow-y-auto\">\n <ElInput v-model={attrs.src} prefix-icon={Share} style=\"width: 100%\" placeholder=\"请输入链接地址\">\n </ElInput>\n {ImageView}\n </ElTabPane>\n </ElTabs>\n\n if (selectState.value == \"attrs\") {\n panel = <ElRow gutter={20} class=\"h-full overflow-y-auto\">\n <ElCol span={14}>\n {ImageView}\n </ElCol>\n <ElCol span={10}>\n <ElForm label-position=\"top\" model={attrs}>\n <ElFormItem label=\"图片描述\">\n <ElInput v-model={attrs.alt} type=\"textarea\" {...{rows: 3}} style=\"width: 100%\" placeholder=\"请输入\">\n </ElInput>\n </ElFormItem>\n <ElFormItem label=\"图片显示宽度\">\n <ElInput v-model={attrs.width} style=\"width: 100%\" placeholder=\"请输入宽度(可支持%)\">\n </ElInput>\n </ElFormItem>\n <ElFormItem label=\"图片显示高度\">\n <ElInput v-model={attrs.height} style=\"width: 100%\" placeholder=\"请输入高度(可支持%)\">\n </ElInput>\n </ElFormItem>\n <ElFormItem label=\"图片最大显示宽度\">\n <ElInput v-model={attrs.maxWidth} style=\"width: 100%\" placeholder=\"请输入宽度(可支持%)\">\n </ElInput>\n </ElFormItem>\n <ElFormItem label=\"图片最大显示高度\">\n <ElInput v-model={attrs.maxHeight} style=\"width: 100%\" placeholder=\"请输入高度(可支持%)\">\n </ElInput>\n </ElFormItem>\n <ElFormItem label=\"图片显示外边距\">\n <div style=\"display: flex;flex-wrap: nowrap;gap: 10px;justify-content: space-around;\">\n <div>\n 上:\n <ElInput v-model={margin.value.t} placeholder=\"\">\n </ElInput>\n </div>\n <div>\n 右:\n <ElInput v-model={margin.value.r} placeholder=\"\">\n </ElInput>\n </div>\n\n <div>\n 下:\n <ElInput v-model={margin.value.b} placeholder=\"\">\n </ElInput>\n </div>\n\n <div>\n 左:\n <ElInput v-model={margin.value.l} placeholder=\"\">\n </ElInput>\n </div>\n </div>\n </ElFormItem>\n </ElForm>\n </ElCol>\n </ElRow>\n }\n\n return panel;\n }\n }\n})\n\n/**\n *\n * @param attrs 显示图片编辑面板\n * @returns\n */\nexport const showImageEditDialog = async (attrs: any) => {\n return new Promise((resolve, reject) => {\n\n // 初始化\n selectState.value = attrs.src ? \"attrs\" : \"select\";\n\n const imageEditPanelRef = ref<any>(null);\n const editResult = computed<any>(() => imageEditPanelRef.value?.getResult())\n\n // 去裁切\n const toCropImageHandle = async () => {\n\n if (editResult.value.src) {\n var result = await ImageCropper({src: editResult.value.src});\n if (result.data) {\n imageEditPanelRef.value?.setSrc(result.data);\n }\n }\n\n }\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve({...editResult.value});\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"选择图片\",\n class: \"mk-material-select\",\n width: \"70%\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return h(ImageEditPanelComponent, {attrs, ref: r => imageEditPanelRef.value = r});\n },\n footer: () => {\n\n // 下一步按钮\n let nextBtns = [\n <ElButton type=\"primary\" onClick={() => selectState.value = 'attrs'}>\n 下一步\n </ElButton>\n ]\n\n if (selectState.value == \"attrs\") {\n nextBtns = [\n <ElButton type=\"primary\" onClick={() => selectState.value = 'select'}>\n 重新选图\n </ElButton>,\n <ElButton type=\"primary\" onClick={toCropImageHandle}>\n 裁切图\n </ElButton>,\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确定\n </ElButton>\n ];\n }\n\n return (\n <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n {...nextBtns}\n </Fragment>\n );\n },\n });\n });\n}\n","\nimport { Fragment,ref } from 'vue'\nimport { Dialoger } from '@maketribe/dm'\nimport { ElButton,ElInput } from \"element-plus\";\nimport { Search } from \"@element-plus/icons-vue\";\nimport { useLexicalEditorContext } from \"../composables\"\n\n/**\n * 显示模块选择 \n * @returns \n */\nexport const showModuleSelectDialog = async (namespace:string) => {\n\n const { modules } = useLexicalEditorContext(namespace);\n\n return new Promise(resolve => {\n \n const selectOption = ref<any|null>(null);\n const searchInputValue = ref(\"\");\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve({...selectOption.value as any});\n };\n\n // 点击块\n const clickHandle = (item:any)=>{\n selectOption.value = item;\n }\n\n const dialogInstance = Dialoger.customRender({\n title: \"模版选择\",\n class: \"mk-doc-editor__module-template_dialog\",\n width: \"700px\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n\n // 循环体\n const templateListComponent = modules.filter(item=>{\n if(searchInputValue.value){\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\n }\n else{\n return true;\n }\n }).map(item=>{\n\n return <div \n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \n onClick={()=>clickHandle(item)}>\n {item.cover ? <img src={item.cover} /> :null}\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\n </div>\n })\n\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\n {templateListComponent}\n </div>\n </div>\n },\n footer: () => {\n return <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\n 确定\n </ElButton>\n </Fragment>\n },\n });\n });\n}\n","import { $getSelection, $isNodeSelection, COMMAND_PRIORITY_EDITOR, ElementNode, LexicalEditor, LexicalNode } from \"lexical\";\nimport { ref,Fragment } from \"vue\";\nimport { Dialoger } from \"@maketribe/dm\";\nimport { ElButton,ElInput } from \"element-plus\";\nimport { Search } from \"@element-plus/icons-vue\";\nimport { useLexicalEditorContext } from \"../composables\";\n\n \n/**\n * 显示模块模版选择\n * @returns \n */\nexport const showTemplateSelectDialog = function(namespace:string):Promise<string> {\n\n const { templates } = useLexicalEditorContext(namespace);\n \n return new Promise<string>((resolve:any)=> {\n\n const selectOption = ref<any|null>(null);\n const searchInputValue = ref(\"\");\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve(selectOption.value?.name);\n };\n\n // 点击块\n const clickHandle = (item:any)=>{\n selectOption.value = item;\n }\n\n const dialogInstance = Dialoger.customRender({\n title: \"模版选择\",\n class: \"mk-doc-editor__module-template_dialog\",\n width: \"700px\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n\n // 循环体\n const templateListComponent = templates.filter(item=>{\n if(searchInputValue.value){\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\n }\n else{\n return true;\n }\n }).map(item=>{\n\n return <div \n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \n onClick={()=>clickHandle(item)}>\n {item.cover ? <img src={item.cover} /> :null}\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\n </div>\n })\n\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\n {templateListComponent}\n </div>\n </div>\n },\n footer: () => {\n return <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\n 确定\n </ElButton>\n </Fragment>\n },\n });\n });\n}\n\n\n/**\n * html模版弹窗\n * @returns \n */\nexport const showHtmlTemplateDialog = function():Promise<string> {\n\n return new Promise<string>((resolve:any)=> {\n\n const contentInputValue = ref(\"\");\n\n // 取消编辑\n const handleCancelClick = () => {\n dialogInstance.destroy();\n };\n\n // 确认编辑\n const handleConfirmClick = () => {\n dialogInstance.destroy();\n resolve(contentInputValue.value);\n };\n\n const dialogInstance = Dialoger.customRender({\n title: \"自定义HTML模版内容\",\n class: \"mk-doc-editor__module-template_dialog\",\n width: \"700px\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return <ElInput v-model={contentInputValue.value} type=\"textarea\" autosize={{minRows:10,maxRows:20}} />\n },\n footer: () => {\n return <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确定\n </ElButton>\n </Fragment>\n },\n });\n });\n}\n\n\n","\n\nimport { onMounted, provide, inject, reactive,onUnmounted } from 'vue'\nimport type { CreateEditorArgs, LexicalEditor, LexicalNode, NodeKey } from 'lexical'\nimport { $createParagraphNode, $getRoot, $getSelection, $isElementNode, $isParagraphNode, $isTextNode, BLUR_COMMAND, createEditor, ElementNode } from 'lexical'\nimport { mergeRegister } from '@lexical/utils'\nimport { useMounted } from './utils'\nimport { generateNodesFromHtml } from '../utils'\nimport { clearSelection, setSelected } from './useElementBlockSelection'\n\n\n/**\n * 编辑器模块\n */\nexport type LexicalEditorModule = {\n name:string,\n title:string,\n cover?:string,\n template:string,\n editorCss?:string|null|undefined,\n options:Array<any>\n}\n\n/**\n * 编辑器模版类型\n */\nexport type LexicalEditorTemplate = {\n name:string,\n title:string,\n cover?:string,\n template:string,\n editorCss?:string|null|undefined,\n}\n\n/**\n * 编辑器上下文\n */\nexport type LexicalEditorContextData = {\n importCss:string,\n importScript:string,\n importStyles:string,\n modules:Array<LexicalEditorModule>,\n templates:Array<LexicalEditorTemplate>\n}\n\n/**\n * 快捷工具条\n */\nexport type ShortcutToolsType = {\n exist:(node:LexicalNode)=>boolean,\n tools:(Array<{ key?:string, title:string,icon:string,action:(node:any,dom?:HTMLElement)=>unknown}> | ((nodeKey?:NodeKey | string)=>Array<any>|null))\n}\n\n/**\n * 编辑器插件\n */\nexport type LexicalEditorPlugin = {\n nodes?:Array<any>,\n tools?:Array<{ icon: string; text:string, action:(editor:LexicalEditor)=>void,disable?:(node:LexicalNode)=>boolean, sort:number }>,\n shortcutTools?:(editor:LexicalEditor)=>Array<ShortcutToolsType>,\n useMounted:(editor:LexicalEditor)=>any,\n modules?:Array<LexicalEditorModule>,\n templates?:Array<LexicalEditorTemplate>\n}\n\n/**\n * 编辑器上下文\n */\nexport type LexicalEditorContext = LexicalEditorContextData & {\n editor:LexicalEditor\n stageId:string,\n tools:Array<{ icon: string; text:string, action:(editor:LexicalEditor)=>void,disable?:(node:LexicalNode)=>boolean, sort:number }>,\n shortcutTools:Array<ShortcutToolsType>\n}\n\n/**\n * 编辑器配置项\n */\nexport type LexicalEditorOptions = CreateEditorArgs & LexicalEditorContextData\n\n/**\n * 编辑器实例注入的key\n */\nconst LexicalEditorProviderKey = 'LexicalEditorProviderKey'\n\n/**\n * 历史合并选项\n */\nconst HISTORY_MERGE_OPTIONS = { tag: 'history-merge' }\n\n/**\n * 编辑器插件定义\n */\nconst EditorPlugins:Array<{namespace?:string,plugin:LexicalEditorPlugin}> = [];\n\n/**\n * 舞台全局数据\n */\nconst StageGlobalData = { num:0 }\n\n/**\n * 编辑器命名空间缓存\n */\nconst EditorNamespaceContextCache:any = {};\n\n \n/**\n * 注册编辑器插件\n * @param plugin\n * @param namespace\n */\nexport const registerLexicalEditorPlugin = function (plugin:LexicalEditorPlugin,namespace?:string) {\n EditorPlugins.push({namespace,plugin});\n}\n \n/**\n *\n * @param options 配置项\n * @param errHandle\n */\nexport const useLexicalEditor = function (options: LexicalEditorOptions, errHandle?: (error: Error) => void) {\n\n // 编号自增\n StageGlobalData.num++\n\n // 命名空间\n const namespace = options.namespace ?? `eidtor-${StageGlobalData.num}`;\n\n // 存在相同的空间则报错\n if(EditorNamespaceContextCache[namespace]){\n throw new Error(`编辑器命名空间【${namespace}】重复!`)\n }\n\n // 可以使用的插件列表\n const plugins = EditorPlugins.filter(p=>(!p.namespace || (p.namespace === namespace)))\n\n // 注册的节点\n const registerNodes:any = plugins.filter(p=>p.plugin.nodes).map(p=>p.plugin.nodes).reduce((a:any,b:any)=>a.concat(b))\n\n // 创建编辑器\n const editor = createEditor({\n editable: options.editable,\n html: options.html,\n namespace: namespace,\n nodes: options.nodes ? [...registerNodes, ...options.nodes] as any : registerNodes as any,\n theme: options.theme,\n onError: errHandle\n })\n\n // 挂载函数\n const mountHandles:any = plugins.filter(p=>p.plugin.useMounted).map(p=>p.plugin.useMounted)\n // 模版\n const templates:any = plugins.filter(p=>p.plugin.templates && p.plugin.templates.length).map(p=>p.plugin.templates).concat(EditorTemplates.filter(item=>!item.namespace || item.namespace === namespace).map(item=>item.template))\n // 模块\n const modules:any = plugins.filter(p=>p.plugin.modules && p.plugin.modules.length).map(p=>p.plugin.modules).concat(EditorModules.filter(item=>!item.namespace || item.namespace === namespace).map(item=>item.module))\n //快捷工具条\n const shortcutTools:Array<ShortcutToolsType> = []\n // 注入\n provide<LexicalEditorContext>(LexicalEditorProviderKey,EditorNamespaceContextCache[namespace] = {\n editor,stageId:`lexical-stage-${StageGlobalData.num}`,\n tools:plugins.map(p=>p.plugin.tools ?? []).reduce((a:any,b:any)=>a.concat(b)),\n shortcutTools,\n modules:options.modules.concat(modules),\n templates:options.templates.concat(templates),\n importCss:options.importCss,\n importScript:options.importScript,\n importStyles:options.importStyles \n })\n // \n shortcutTools.push(... plugins.map(p=>p.plugin.shortcutTools ? p.plugin.shortcutTools(editor):[]).reduce((a:any,b:any)=>a.concat(b)));\n\n useMounted(()=>{\n // 删除空容器\n return mergeRegister(\n // // 焦点移除\n // editor.registerCommand<FocusEvent>(BLUR_COMMAND,(event:FocusEvent) => {\n // // 选中根\n // // setSelected(editor,true,$getRoot().__key)\n // return false;\n // }, 1),\n // 补空\n editor.registerUpdateListener(({ editorState }) => {\n \n editor.update(() => {\n const rootNode = $getRoot();\n // || !$isParagraphNode(rootNode.getLastChild())\n // 始终保持一个 p 存在\n if (rootNode.isEmpty()) { \n const p = $createParagraphNode()\n rootNode.append(p) \n }\n\n //给所有空容器设置标识\n const list = [...rootNode.getChildren()];\n\n for(let i = 0; i<list.length;i++){\n\n const node = list[i];\n const el = editor.getElementByKey(node.getKey());\n\n if($isElementNode(node) && el){\n // 标识空容器\n if(node.isEmpty()){\n el.classList.add(\"mk-doc__empty-mark\");\n }\n else {\n el.classList.remove(\"mk-doc__empty-mark\");\n }\n \n list.push(...node.getChildren())\n }\n else if(el && $isTextNode(node)){\n // 标识br 前面的文本容器\n if(el?.nextElementSibling?.tagName.toLowerCase() == \"br\"){\n el.classList.add(\"mk-doc__br-brfore-mark\");\n }\n else{\n el.classList.remove(\"mk-doc__br-brfore-mark\");\n }\n }\n }\n })\n }),\n ...mountHandles.map((handle:any)=>handle(editor))\n ) \n })\n\n // 组件挂载之后\n onMounted(() => {\n\n // editor.blur(async ()=> await clearSelection(editor));\n\n editor.setEditable(options.editable !== undefined ? options.editable : true)\n\n // // 卸载组件之后 销毁编辑器实例\n onUnmounted(()=>{\n // 销毁这个命名空间的山修改文缓存\n delete EditorNamespaceContextCache[namespace];\n })\n })\n\n return { \n // 设置初始化内容\n setEditorInitializeContent:(content?:string)=>{\n editor.update(() => {\n\n const root = $getRoot()\n\n root.clear();\n\n if(content){\n root.append(...generateNodesFromHtml(editor,content));\n }\n else{\n root.append($createParagraphNode())\n }\n\n // // 设置选中 \n // if ($getSelection() == null) { \n // setSelected(editor,true,root.getLastChild()?.getKey() ?? \"\")\n // } \n\n }, HISTORY_MERGE_OPTIONS)\n },\n editor \n }\n}\n\n/**\n * 获取当前编辑器上下文\n * @param namespace \n * @returns \n */\nexport const useLexicalEditorContext = function (namespace?:string) {\n\n const data = namespace ? EditorNamespaceContextCache[namespace] as LexicalEditorContext : inject<LexicalEditorContext>(LexicalEditorProviderKey);\n\n if(!data){ throw new Error(\"未获取到当前编辑器上下文!\"); }\n\n return {\n editor:data.editor,stageId:data.stageId,\n modules:data.modules ?? [],\n templates:data.templates ?? [],\n importCss:data.importCss ?? \"\",\n importScript:data.importScript ?? \"\",\n importStyles:data.importStyles ?? \"\",\n shortcutToolsList:data.shortcutTools,\n toolbarExtendPlugins :data.tools,\n // 查找模块\n findLexicalEditorModule(name:string):LexicalEditorModule|undefined{\n\n const module = data.modules.find(item=>item.name == name);\n \n if(module == null){\n console.warn(\"未知的模块:【\" + name + \"】\")\n }\n \n return module;\n },\n // 查找模版\n findLexicalEditorTemplate(name:string):LexicalEditorTemplate|undefined{\n\n const tempalte = data.templates.find(item=>item.name == name);\n \n if(tempalte == null){\n console.warn(\"未知的模版:【\" + name + \"】\")\n }\n \n return tempalte;\n },\n }\n}\n\n/**\n * 编辑器模块定义\n */\nconst EditorModules:Array<{namespace?:string,module:LexicalEditorModule}> = [];\n\n/**\n * 注册模块\n * @param options\n * @param namespace\n */\nexport const registerLexicalEditorModule = (options:LexicalEditorModule,namespace?:string) => {\n\n if(EditorModules.filter(item=>!item.namespace || item.namespace === namespace).findIndex(item=>item.module.name == options.name) >= 0){\n console.warn(`模块【${options.title}】重复注册!`);\n }\n else{\n EditorModules.push({ namespace,module:options});\n }\n}\n\n/**\n * 卸载模块\n * @param name \n */\nexport const unRegisterLexicalEditorModule = (name:string) => {\n\n for(let i = 0;i < EditorModules.length; i++){\n if(EditorModules[i].module.name == name){\n EditorModules.splice(i,1);\n break;\n }\n }\n}\n\n/**\n * 编辑器模版定义\n */\nconst EditorTemplates:Array<{namespace?:string,template:LexicalEditorTemplate}> = [];\n\n/**\n * 注册模版\n * @param options \n */\nexport const registerLexicalEditorTemplate = (options:LexicalEditorTemplate,namespace?:string) => {\n\n if(EditorTemplates.filter(item=>!item.namespace || item.namespace === namespace).findIndex(item=>item.template.name == options.name) >= 0){\n console.warn(`模版【${options.title}】重复注册!`);\n }\n else{\n EditorTemplates.push({ namespace,template:options});\n }\n}\n\n/**\n * 卸载模版\n * @param name \n */\nexport const unRegisterLexicalEditorTemplate = (name:string) => {\n\n for(let i = 0;i < EditorTemplates.length; i++){\n if(EditorTemplates[i].template.name == name){\n EditorTemplates.splice(i,1);\n break;\n }\n }\n}\n\n// /**\n// * 初始化编辑器\n// * @param editor \n// * @param initialEditorState \n// * @returns \n// */\n// const initializeEditor = (editor: LexicalEditor, initialEditorState?: InitialEditorStateType): void => {\n\n// if (initialEditorState === null) { return }\n\n// if (initialEditorState === undefined) {\n \n// // 编辑内容为空的时候 默认创建一个 p\n// editor.update(() => {\n\n// const root = $getRoot()\n\n// if (root.isEmpty()) {\n\n// const paragraph = $createParagraphNode()\n\n// root.append(paragraph)\n\n// const activeElement = document.activeElement\n\n// if ($getSelection() !== null || (activeElement !== null && activeElement === editor.getRootElement())) {\n// paragraph.select()\n// }\n// }\n// }, HISTORY_MERGE_OPTIONS)\n// }\n// else if (initialEditorState !== null) {\n\n// switch (typeof initialEditorState) {\n// case 'string': {\n// const parsedEditorState = editor.parseEditorState(initialEditorState)\n// editor.setEditorState(parsedEditorState, HISTORY_MERGE_OPTIONS)\n// break\n// }\n// case 'object': {\n// editor.setEditorState(initialEditorState, HISTORY_MERGE_OPTIONS)\n// break\n// }\n// case 'function': {\n// editor.update(() => {\n\n// const root = $getRoot()\n\n// if (root.isEmpty()) { initialEditorState(editor) }\n\n// }, HISTORY_MERGE_OPTIONS)\n// break\n// }\n// }\n// }\n// }\n","\n\nimport { ref } from 'vue'\nimport type { CommandListenerPriority,ElementFormatType, LexicalEditor, LexicalNode, TextFormatType } from 'lexical'\nimport { $createParagraphNode, $getSelection,$isElementNode,$isRangeSelection, $isNodeSelection, CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND, FORMAT_TEXT_COMMAND, REDO_COMMAND, UNDO_COMMAND,FORMAT_ELEMENT_COMMAND } from 'lexical'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { useMounted } from './utils'\nimport { $getSelectionStyleValueForProperty, $patchStyleText, $setBlocksType } from '@lexical/selection'\nimport { $isLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\nimport { $createHeadingNode, $isHeadingNode, HeadingTagType } from '@lexical/rich-text'\nimport { useLexicalEditorContext } from './lexicalEditor'\nimport { showLinkEditDialog,sanitizeUrl } from \"../utils\" \n\n/**\n * 最低的监听优先级\n */\nconst CommandLowPriority: CommandListenerPriority = 1\n\n/**\n * 编辑配置项\n */\ntype LexicalEditOptions = {\n rootFontSize?:number,\n fontSizeOptions?:Array<{value:string,label:string}>,\n fontFamilyOptions?:Array<{value:string,label:string} >\n}\n\n// 字体\nconst FONT_FAMILY = \"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings\".split(\";\")\n\n// 设置样式\nconst addFontSizeToOptions = function(options:Array<{value:string,label:string}>, size:number,rootSize:number = 14){\n options.push({value:`${Math.round(size / rootSize * 100) / 100}rem`,label:size+\"px\"});\n}\n\n/**\n * 获取编辑器状态\n * @param editor\n * @param options\n */\nexport const useLexicalEditorState = function (editor?: LexicalEditor,options?:LexicalEditOptions) {\n\n if (!editor) { editor = useLexicalEditorContext().editor; }\n\n // 初始化配置\n if(!options){ options = { rootFontSize:14,fontFamilyOptions:[],fontSizeOptions:[] }; }\n\n // 根文章大小默认14\n options.rootFontSize ??= 14;\n\n // 字体大小配置项初始化\n if(!options?.fontSizeOptions?.length){\n options.fontSizeOptions = [];\n // 数据初始化\n for(let i=0;i<80;i+=2){\n addFontSizeToOptions(options.fontSizeOptions,10 + i,options.rootFontSize);\n if(i >= 2 && i < 22){\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 0.5,options.rootFontSize);\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 1,options.rootFontSize);\n addFontSizeToOptions(options.fontSizeOptions,10 + i + 1.5,options.rootFontSize);\n }\n }\n }\n\n // 默认字体初始化\n if(!options?.fontFamilyOptions?.length){\n options.fontFamilyOptions = [{value:\"\",label:\"默认字体\"}].concat(FONT_FAMILY.map(fv=>{\n let fvl = fv.split(\"=\"),label=fvl[0],value=fvl[1] || `'${label}'`;\n return { value,label}\n }))\n }\n\n const canUndo = ref(false)\n const canRedo = ref(false)\n const fontSize = ref(options.rootFontSize+\"px\")\n const fontColor = ref<string>('#000')\n const bgColor = ref<string>('#fff')\n const fontFamily = ref<any>(options.fontFamilyOptions![0])\n const canBold = ref(false)\n const canItalic = ref(false)\n const canUnderline = ref(false)\n const canStrikethrough = ref(false)\n const canSubscript = ref(false)\n const canSuperscript = ref(false)\n\n // 对齐方式\n const alignList = ref<ElementFormatType[]>([\"left\",\"center\",\"right\",\"justify\"])\n const alignValue = ref(alignList.value[0])\n const canLink = ref(false)\n const linkValue = ref(\"\");\n const canTextStyleDisabled = ref(false);\n\n // 内容类型清单\n const contentTypeList = [\n {value:\"paragraph\",label:\"正文\"},\n {value:\"h1\",label:\"标题 1\"},\n {value:\"h2\",label:\"标题 2\"},\n {value:\"h3\",label:\"标题 3\"},\n {value:\"h4\",label:\"标题 4\"},\n {value:\"h5\",label:\"标题 5\"}\n ];\n //当前选中内容\n const curContentTypeDesc = ref(\"正文\");\n\n // 激活的节点\n const activeNode = ref<LexicalNode|null>(null);\n\n // 设置文字样式\n const setTextStyle = function(token:string,value?:string){\n\n if([\"bold\",\"italic\",\"underline\",\"strikethrough\",\"subscript\",\"superscript\"].indexOf(token) >=0){\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, token as TextFormatType)\n }\n else if(token == \"align\"){\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND,value as ElementFormatType)\n }\n else if(token == \"link\"){\n\n if(canLink.value){\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }\n else{\n showLinkEditDialog(\"\").then((href:any)=>{\n if(href.trim()){\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(href))\n }\n })\n }\n \n }\n else{\n editor.update(() => {\n\n const selection = $getSelection()\n \n if (selection !== null){\n $patchStyleText(selection,{ [token]:value } as any)\n }\n },{})\n }\n }\n\n // 设置内容\n const setContentType = function(type:string){\n\n const contentType:any = contentTypeList.find(item=>item.value == type)\n \n editor.update(() => {\n \n const selection = $getSelection()\n \n if ($isRangeSelection(selection)){\n\n // 清空字体大小\n $patchStyleText(selection, { [\"font-size\"]:\"\" })\n \n if(contentType.value == \"paragraph\"){\n\n if(canSubscript.value){\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript' as TextFormatType)\n }\n else if(canSuperscript.value){\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript' as TextFormatType)\n }\n else{\n $setBlocksType(selection, () => $createParagraphNode())\n }\n }\n else{\n $setBlocksType(selection, () => {\n return $createHeadingNode(contentType.value as HeadingTagType)\n })\n }\n curContentTypeDesc.value = contentType.label\n }\n })\n }\n\n useMounted(() => {\n\n return mergeRegister(\n editor.registerCommand(CAN_UNDO_COMMAND, (payload: boolean) => {\n canUndo.value = payload\n return false\n }, CommandLowPriority),\n editor.registerCommand(CAN_REDO_COMMAND, (payload: boolean) => {\n canRedo.value = payload\n return false\n },CommandLowPriority),\n // 其他状态\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n\n const selection = $getSelection()\n\n if ($isRangeSelection(selection)) {\n\n const anchorNode = selection.anchor.getNode()\n\n let parentNode = anchorNode.getKey() === 'root'\n ? anchorNode\n : $findMatchingParent(anchorNode, (e) => {\n const parent = e.getParent();\n // $isRootOrShadowRoot\n return parent !== null && $isElementNode(e) ;\n });\n\n if (parentNode === null){ parentNode = anchorNode.getTopLevelElementOrThrow() }\n\n let parentDOM = editor.getElementByKey(parentNode.getKey());\n\n // 文本对齐\n alignValue.value = (parentDOM?.style.textAlign as ElementFormatType) || \"left\";\n\n if(alignValue.value == \"start\"){ alignValue.value = \"left\"; }\n else if(alignValue.value == \"end\"){ alignValue.value = \"right\"; }\n\n // Update text format\n canBold.value = selection.hasFormat('bold')\n canItalic.value = selection.hasFormat('italic')\n canUnderline.value = selection.hasFormat('underline')\n canStrikethrough.value = selection.hasFormat('strikethrough')\n canSubscript.value = selection.hasFormat('subscript')\n canSuperscript.value = selection.hasFormat('superscript')\n\n if(canSubscript.value){\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == 'subscript')?.label ?? \"正文\"\n }\n else if(canSuperscript.value){\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == 'superscript')?.label ?? \"正文\"\n }\n else if (parentDOM !== null) {\n const type = $isHeadingNode(parentNode) ? parentNode.getTag() : parentNode.getType();\n curContentTypeDesc.value = contentTypeList.find(item=>item.value == type)?.label ?? \"正文\"\n }\n\n // Handle buttons\n var ff = $getSelectionStyleValueForProperty(selection, 'font-family', '');\n let fs = $getSelectionStyleValueForProperty(selection, 'font-size', '');\n \n if(fs){\n fontSize.value = Math.round(parseFloat(fs) * (options.rootFontSize!))+\"px\"\n }\n else if(parentDOM){\n fontSize.value = editor.getRootElement()?.ownerDocument.defaultView?.getComputedStyle(parentDOM).fontSize ?? Math.round((options.rootFontSize!))+\"px\";\n }\n else{\n fontSize.value = Math.round((options.rootFontSize!))+\"px\"\n }\n\n // 字体\n if(!ff && parentDOM){\n ff = editor.getRootElement()?.ownerDocument.defaultView?.getComputedStyle(parentDOM).fontFamily ?? \"\";\n }\n \n fontColor.value = $getSelectionStyleValueForProperty(selection, 'color', '#000')\n bgColor.value = $getSelectionStyleValueForProperty(selection, 'background-color', '')\n fontFamily.value = options.fontFamilyOptions?.find(item=>item.value==ff) || options.fontFamilyOptions![0];\n \n // 不禁用\n canTextStyleDisabled.value = false;\n\n // Update links\n const parent = anchorNode.getParent()\n \n if(canLink.value = $isLinkNode(parent) || $isLinkNode(anchorNode)){\n linkValue.value = $isLinkNode(parent) ? parent.getURL() : (anchorNode as LinkNode).getURL()\n }\n else{\n linkValue.value = \"\";\n }\n\n // 节点类型\n activeNode.value = anchorNode;\n\n }\n else{\n canTextStyleDisabled.value = true;\n activeNode.value = $isNodeSelection(selection) ? selection.getNodes()[0] : null;\n curContentTypeDesc.value = \"正文\";\n }\n })\n })\n )\n })\n\n // undo\n const undoCommand = ()=>{ editor.dispatchCommand(UNDO_COMMAND, undefined) }\n const redoCommand = ()=>{ editor.dispatchCommand(REDO_COMMAND, undefined) }\n\n return {\n canUndo,undoCommand,\n canRedo,redoCommand,\n canTextStyleDisabled,\n setTextStyle,\n fontSize,fontSizeOptions:options.fontSizeOptions,\n fontColor,\n bgColor,\n fontFamily,fontFamilyOptions:options.fontFamilyOptions,\n canBold,\n canItalic,\n canUnderline,\n canStrikethrough,\n canSubscript,\n canSuperscript,\n alignList,\n alignValue,\n canLink,\n linkValue,\n activeNode,contentTypeList,curContentTypeDesc,setContentType\n }\n}\n","\n\nimport { mergeRegister } from '@lexical/utils'\n\nimport {\n $createNodeSelection,\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n $setSelection,\n COMMAND_PRIORITY_LOW,CLICK_COMMAND, LexicalCommand, createCommand, NodeKey, LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from 'lexical'\nimport { useLexicalEditorContext } from './lexicalEditor'\nimport { useMounted } from './utils'\nimport { unref } from 'vue'\n\n/**\n * toolsbar的函数\n */\nexport type SelectElementBlockToolsbarFunction = (nodeKey?:NodeKey | string)=>Array<any>|null;\n\n/**\n * 选中元素快\n */\nexport const SELECTED_ELEMENTBLOCK_COMMAND: LexicalCommand<NodeKey|string|null> = createCommand('SELECTED_ELEMENTBLOCK_COMMAND')\n\n/**\n * 移除元素快\n */\nexport const REMOVE_ELEMENTBLOCK_COMMAND: LexicalCommand<undefined|null> = createCommand('REMOVE_ELEMENTBLOCK_COMMAND')\n\n/**\n * 更新模块工具条位置信息\n */\nexport const UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND: LexicalCommand<undefined|null> = createCommand('UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND')\n\n/**\n * 判断选中的方法\n */\nexport type SelectExistFunc = (el:HTMLElement)=>HTMLElement|null\n\n/**\n * 判断选中的方法\n */\nexport type ElementSelectionHandle = (el:HTMLElement)=>undefined\n\n// isNodeSelected \nexport const isNodeSelected = function (editor: LexicalEditor, key: NodeKey): boolean {\n return editor.getEditorState().read(() => {\n const node = $getNodeByKey(key)\n if (node === null)\n return false\n return node.isSelected()\n })\n}\n\n// 取消选中\nexport const clearSelection = (editor: LexicalEditor):Promise<undefined> => {\n return new Promise(resolove=>{\n editor.update(() => {\n const selection = $getSelection()\n if ($isNodeSelection(selection) && selection){\n selection.clear();\n }\n resolove(undefined)\n })\n })\n}\n\n// 设置选中\nexport const setSelected = (editor: LexicalEditor,selected: boolean,key:string):Promise<undefined> => {\n\n return new Promise(resolove=>{\n editor.update(() => {\n let selection = $getSelection()\n \n if (!$isNodeSelection(selection)) {\n selection = $createNodeSelection()\n $setSelection(selection)\n }\n if ($isNodeSelection(selection)) {\n if (selected)\n selection.add(unref(key))\n else\n selection.delete(unref(key))\n }\n resolove(undefined)\n })\n })\n \n}\n\n// 设置选中\nexport const setElementBlockSelection = async (editor:LexicalEditor,nodeKey:string)=>{\n await clearSelection(editor);\n await setSelected(editor,true,nodeKey);\n}\n","import { $isHeadingNode, HeadingNode, type HeadingTagType } from '@lexical/rich-text'\nimport { $getNextRightPreorderNode, mergeRegister } from '@lexical/utils'\nimport {\n $getNodeByKey,\n $getRoot,\n $isElementNode,\n type ElementNode,\n type LexicalEditor,\n type NodeKey,\n type NodeMutation,\n TextNode,\n} from 'lexical'\nimport { ref } from 'vue'\nimport { useMounted } from './utils'\n\nexport type TableOfContentsEntry = [\n key: NodeKey,\n text: string,\n tag: HeadingTagType,\n]\n\nfunction toEntry(heading: HeadingNode): TableOfContentsEntry {\n return [heading.getKey(), heading.getTextContent(), heading.getTag()]\n}\n\nfunction $insertHeadingIntoTableOfContents(\n prevHeading: HeadingNode | null,\n newHeading: HeadingNode | null,\n currentTableOfContents: Array<TableOfContentsEntry>,\n): Array<TableOfContentsEntry> {\n if (newHeading === null)\n return currentTableOfContents\n\n const newEntry: TableOfContentsEntry = toEntry(newHeading)\n let newTableOfContents: Array<TableOfContentsEntry> = []\n if (prevHeading === null) {\n // check if key already exists\n if (\n currentTableOfContents.length > 0\n && currentTableOfContents[0][0] === newHeading.__key\n ) {\n return currentTableOfContents\n }\n\n newTableOfContents = [newEntry, ...currentTableOfContents]\n }\n else {\n for (let i = 0; i < currentTableOfContents.length; i++) {\n const key = currentTableOfContents[i][0]\n newTableOfContents.push(currentTableOfContents[i])\n if (key === prevHeading.getKey() && key !== newHeading.getKey()) {\n // check if key already exists\n if (\n i + 1 < currentTableOfContents.length\n && currentTableOfContents[i + 1][0] === newHeading.__key\n ) {\n return currentTableOfContents\n }\n\n newTableOfContents.push(newEntry)\n }\n }\n }\n return newTableOfContents\n}\n\nfunction $deleteHeadingFromTableOfContents(\n key: NodeKey,\n currentTableOfContents: Array<TableOfContentsEntry>,\n): Array<TableOfContentsEntry> {\n const newTableOfContents = []\n for (const heading of currentTableOfContents) {\n if (heading[0] !== key)\n newTableOfContents.push(heading)\n }\n return newTableOfContents\n}\n\nfunction $updateHeadingInTableOfContents(\n heading: HeadingNode,\n currentTableOfContents: Array<TableOfContentsEntry>,\n): Array<TableOfContentsEntry> {\n const newTableOfContents: Array<TableOfContentsEntry> = []\n for (const oldHeading of currentTableOfContents) {\n if (oldHeading[0] === heading.getKey())\n newTableOfContents.push(toEntry(heading))\n\n else\n newTableOfContents.push(oldHeading)\n }\n return newTableOfContents\n}\n\n/**\n * Returns the updated table of contents, placing the given `heading` before the given `prevHeading`. If `prevHeading`\n * is undefined, `heading` is placed at the start of table of contents\n */\nfunction $updateHeadingPosition(\n prevHeading: HeadingNode | null,\n heading: HeadingNode,\n currentTableOfContents: Array<TableOfContentsEntry>,\n): Array<TableOfContentsEntry> {\n const newTableOfContents: Array<TableOfContentsEntry> = []\n const newEntry: TableOfContentsEntry = toEntry(heading)\n\n if (!prevHeading)\n newTableOfContents.push(newEntry)\n\n for (const oldHeading of currentTableOfContents) {\n if (oldHeading[0] === heading.getKey())\n continue\n\n newTableOfContents.push(oldHeading)\n if (prevHeading && oldHeading[0] === prevHeading.getKey())\n newTableOfContents.push(newEntry)\n }\n\n return newTableOfContents\n}\n\nfunction $getPreviousHeading(node: HeadingNode): HeadingNode | null {\n let prevHeading = $getNextRightPreorderNode(node)\n while (prevHeading !== null && !$isHeadingNode(prevHeading))\n prevHeading = $getNextRightPreorderNode(prevHeading)\n\n return prevHeading\n}\n\nexport function useTableOfContents(editor: LexicalEditor) {\n const tableOfContents = ref<Array<TableOfContentsEntry>>([])\n // Set table of contents initial state\n editor.getEditorState().read(() => {\n const root = $getRoot()\n const rootChildren = root.getChildren()\n for (const child of rootChildren) {\n if ($isHeadingNode(child)) {\n tableOfContents.value.push([\n child.getKey(),\n child.getTextContent(),\n child.getTag(),\n ])\n }\n }\n })\n\n const removeRootUpdateListener = editor.registerUpdateListener(\n ({ editorState, dirtyElements }) => {\n editorState.read(() => {\n const updateChildHeadings = (node: ElementNode) => {\n for (const child of node.getChildren()) {\n if ($isHeadingNode(child)) {\n const prevHeading = $getPreviousHeading(child)\n tableOfContents.value = $updateHeadingPosition(\n prevHeading,\n child,\n tableOfContents.value,\n )\n }\n else if ($isElementNode(child)) {\n updateChildHeadings(child)\n }\n }\n }\n\n // If a node is changes, all child heading positions need to be updated\n $getRoot()\n .getChildren()\n .forEach((node) => {\n if ($isElementNode(node) && dirtyElements.get(node.__key))\n updateChildHeadings(node)\n })\n })\n },\n )\n\n // Listen to updates to heading mutations and update state\n const removeHeaderMutationListener = editor.registerMutationListener(\n HeadingNode,\n (mutatedNodes: Map<string, NodeMutation>) => {\n editor.getEditorState().read(() => {\n for (const [nodeKey, mutation] of mutatedNodes) {\n if (mutation === 'created') {\n const newHeading = $getNodeByKey<HeadingNode>(nodeKey)\n if (newHeading !== null) {\n const prevHeading = $getPreviousHeading(newHeading)\n tableOfContents.value = $insertHeadingIntoTableOfContents(\n prevHeading,\n newHeading,\n tableOfContents.value,\n )\n }\n }\n else if (mutation === 'destroyed') {\n tableOfContents.value = $deleteHeadingFromTableOfContents(\n nodeKey,\n tableOfContents.value,\n )\n }\n else if (mutation === 'updated') {\n const newHeading = $getNodeByKey<HeadingNode>(nodeKey)\n if (newHeading !== null) {\n const prevHeading = $getPreviousHeading(newHeading)\n tableOfContents.value = $updateHeadingPosition(\n prevHeading,\n newHeading,\n tableOfContents.value,\n )\n }\n }\n }\n })\n },\n )\n\n // Listen to text node mutation updates\n const removeTextNodeMutationListener = editor.registerMutationListener(\n TextNode,\n (mutatedNodes: Map<string, NodeMutation>) => {\n editor.getEditorState().read(() => {\n for (const [nodeKey, mutation] of mutatedNodes) {\n if (mutation === 'updated') {\n const currNode = $getNodeByKey(nodeKey)\n if (currNode !== null) {\n const parentNode = currNode.getParentOrThrow()\n if ($isHeadingNode(parentNode)) {\n tableOfContents.value = $updateHeadingInTableOfContents(\n parentNode,\n tableOfContents.value,\n )\n }\n }\n }\n }\n })\n },\n )\n\n useMounted(() => mergeRegister(\n removeRootUpdateListener,\n removeHeaderMutationListener,\n removeTextNodeMutationListener,\n ))\n\n return tableOfContents\n}\n","<script setup lang=\"ts\">\nimport { nextTick, onMounted } from 'vue'\nimport { useLexicalEditorContext } from '../composables'\n\nconst props = defineProps<{\n defaultSelection?: 'rootStart' | 'rootEnd'\n}>()\n\nconst { editor } = useLexicalEditorContext();\n\nonMounted(() => {\n\n nextTick(() => {\n editor.focus(() => {\n // If we try and move selection to the same point with setBaseAndExtent, it won't\n // trigger a re-focus on the element. So in the case this occurs, we'll need to correct it.\n // Normally this is fine, Selection API !== Focus API, but fore the intents of the naming\n // of this plugin, which should preserve focus too.\n const activeElement = document.activeElement\n const rootElement = editor.getRootElement() as HTMLDivElement\n if (\n rootElement !== null\n && (activeElement === null || !rootElement.contains(activeElement))\n ) {\n // Note: preventScroll won't work in Webkit.\n rootElement.focus({ preventScroll: true })\n }\n },\n { defaultSelection: props.defaultSelection },\n )\n })\n})\n</script>\n\n<template />\n","<script setup lang=\"ts\">\nimport { useLexicalEditorContext } from '../composables'\nimport type { HistoryState } from '@lexical/history'\nimport { computed, unref, watchEffect } from 'vue'\n\nimport { createEmptyHistoryState, registerHistory } from '@lexical/history'\n\nconst props = defineProps<{ externalHistoryState?: HistoryState }>()\n\nconst { editor } = useLexicalEditorContext()\n\nconst historyState = computed<HistoryState>(() => unref(props.externalHistoryState) || createEmptyHistoryState())\n\nif(editor){\n watchEffect((onInvalidate) => {\n onInvalidate(registerHistory(editor, historyState.value, 1000))\n })\n}\n\n\n\n\n</script>\n\n<template />\n","<script setup lang=\"ts\">\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_EDITOR,\n INDENT_CONTENT_COMMAND,\n KEY_TAB_COMMAND,\n OUTDENT_CONTENT_COMMAND,\n} from 'lexical'\nimport { useLexicalEditorContext,useMounted } from '../composables'\n\nconst { editor } = useLexicalEditorContext()\n\nuseMounted(() => {\n return editor.registerCommand<KeyboardEvent>(KEY_TAB_COMMAND,(event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection))\n return false\n\n event.preventDefault()\n\n return editor.dispatchCommand(\n event.shiftKey ? OUTDENT_CONTENT_COMMAND : INDENT_CONTENT_COMMAND,\n undefined,\n )\n },\n COMMAND_PRIORITY_EDITOR,\n )\n})\n</script>\n\n<template />\n","<script setup lang=\"ts\">\n\nimport {\n $getSelection,$isRangeSelection,$isNodeSelection, NodeKey,$isParagraphNode,\n $isRootNode,$isTextNode\n} from 'lexical'\nimport { $isHeadingNode } from '@lexical/rich-text'\nimport { useLexicalEditorContext, useMounted,setElementBlockSelection } from '../composables'\nimport { ref } from 'vue'\nimport { ArrowRightBold } from \"@element-plus/icons-vue\"\n\nconst { editor } = useLexicalEditorContext()\n\nconst selectNodeTreeList = ref<Array<{ key:string|NodeKey,name:string,desc?:string,disabled:boolean }>>([{name:\"ROOT\",key:\"root\",disabled:true}]);\n\nconst createNodeTree = (node?:any)=>{\n\n let list:any = [];\n\n if(node){\n\n let name:string = $isParagraphNode(node) ? \"P\" : (node.getName ? node.getName() : node.getType());\n\n // 标题\n if($isHeadingNode(node)){ name = `${node.getTag()}` }\n\n list.push({ \n key:node.getKey(),\n name:name.toUpperCase(),\n desc:node.getDesc ? node.getDesc() : undefined,\n disabled:$isTextNode(node) || ($isParagraphNode(node) && node.getChildrenSize() <= 0)\n })\n\n if(node.getParent()){\n list = list.concat(createNodeTree(node.getParent()))\n }\n }\n\n return list;\n}\n\nuseMounted(() => {\n\n return editor.registerUpdateListener(({ editorState }) => {\n\n editorState.read(()=>{\n\n const selection = $getSelection()\n\n if ($isRangeSelection(selection)) {\n selectNodeTreeList.value = createNodeTree(selection.anchor.getNode()).reverse();\n }\n else if($isNodeSelection(selection)){\n selectNodeTreeList.value = createNodeTree(selection.getNodes()[0]).reverse();\n }\n })\n \n })\n})\n\n \n</script>\n\n<template>\n <div class=\"lexical-editor-node-tree\">\n <template v-for=\"item in selectNodeTreeList\" :key=\"item.key\">\n <div class=\"item\">\n <el-tooltip effect=\"dark\" :content=\"item.desc\" :disabled=\"!item.desc\" placement=\"top\">\n <el-button class=\"text\" text :nodeKey=\"item.key\" :disabled=\"item.disabled\" @click=\"setElementBlockSelection(editor,item.key)\">\n {{item.name}}\n <el-icon class=\"el-icon--right\"><ArrowRightBold /></el-icon>\n </el-button>\n </el-tooltip>\n </div>\n </template>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n.lexical-editor-node-tree{\n display: flex;\n align-items: center;\n min-height: 30px;\n >.item{\n display: flex;\n align-items: center;\n font-size: 14px;\n .text{\n padding: 5px 5px 5px 7px;\n display: flex;\n align-items: center;\n }\n &:last-child .el-icon--right{\n display: none;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { \n type CommandListenerPriority, $isNodeSelection, $getSelection, $getNodeByKey, SELECTION_CHANGE_COMMAND, \n $isTextNode,$isElementNode, $isRangeSelection, $isRootNode, CLICK_COMMAND,$isParagraphNode\n} from 'lexical'\nimport { mergeRegister } from '@lexical/utils'\nimport { \n useLexicalEditorContext, useMounted ,\n UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND,\n SELECTED_ELEMENTBLOCK_COMMAND,\n REMOVE_ELEMENTBLOCK_COMMAND, setElementBlockSelection,\n} from '../composables'\nimport { $isModuleDecoratorWarpNode,$isModuleDecoratorNode,$isHtmlElementDecoratorNode ,deepCloneNode} from \"../nodes\"\nimport { ref, reactive, shallowRef, nextTick } from 'vue'\nimport {MKSvgIcon} from \"../../SvgIcon\";\n\n// 点击工具条按钮\nconst lowPriority: CommandListenerPriority = 1\nconst { editor,stageId,findLexicalEditorModule,shortcutToolsList } = useLexicalEditorContext()\nconst selectionMarkPos = ref({ left: \"px\", top: \"0px\",width:\"0\",height:\"0\" });\nconst toolbarRef = ref<HTMLDivElement | null>(null)\nconst selectPayload = shallowRef<any>(null);\nconst toolsPos = reactive({ left: \"px\", top: \"0px\" });\nconst showTools = ref(false);\nconst showMask = ref(false);\nconst a = ref()\n\n// watch(DEVICE_VIEW_MODE, () => {\n// editor.dispatchCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, null);\n// })\n\n// 更新工具条坐标\nconst updateToolsPos = () => {\n\n nextTick(() => {\n \n if (selectPayload.value != null) {\n\n const stageIframe = document.body.querySelector(\"#\"+stageId) as HTMLElement;\n // const editIframeRect = stageIframe?.getBoundingClientRect();\n const editBodyRect = editor.getRootElement()?.getBoundingClientRect();\n const selectElement = editor.getElementByKey(selectPayload.value.nodeKey) as HTMLElement\n const selectRect = selectElement.getBoundingClientRect();\n const selectElComputedStyle = window.getComputedStyle(selectElement);\n const selectElMarginTop:number = parseInt(selectElComputedStyle.marginTop)\n const selectElMarginLeft:number = parseInt(selectElComputedStyle.marginLeft)\n const selectElMarginBottom:number = parseInt(selectElComputedStyle.marginBottom)\n const selectElMarginRight:number = parseInt(selectElComputedStyle.marginRight)\n\n let baseY = (stageIframe?.offsetTop ?? 0)- (editBodyRect?.y ?? 0),\n baseX = (stageIframe?.offsetLeft ?? 0)- (editBodyRect?.x ?? 0);\n\n if(toolbarRef.value != null){\n\n const toolsRect = toolbarRef.value.getBoundingClientRect();\n \n // 中心点\n toolsPos.top = Math.max(selectRect.y - toolsRect.height - 5 + baseY, 5 + baseY) + \"px\"\n toolsPos.left = Math.max(toolsRect.width / -2 + selectRect.x + selectRect.width / 2,0) + \"px\";\n }\n\n // 选中框\n selectionMarkPos.value = {\n top:`${selectRect.y + baseY - selectElMarginTop}px`,left:`${selectRect.x + baseX - selectElMarginLeft}px`,\n width:`${selectRect.width + selectElMarginLeft + selectElMarginRight}px`,height:`${selectRect.height + selectElMarginTop + selectElMarginBottom}px`\n };\n\n }\n })\n return false;\n}\n\n// 节点标题\nconst nodeTitle = ref(\"\")\n\n// 选中兄弟节点\nconst canSelectedNextNode = ref(false);\nconst selectedNextNode = ()=>{\n const node = editor.getEditorState().read(() => {\n return $getNodeByKey(selectPayload.value.nodeKey)\n }) as any;\n \n if(node && node.__next){\n setElementBlockSelection(editor,node.__next);\n }\n}\nconst canSelectedPrevNode = ref(false);\nconst selectedPrevNode = ()=>{\n const node = editor.getEditorState().read(() => {\n return $getNodeByKey(selectPayload.value.nodeKey)\n }) as any;\n \n if(node && node.__prev){\n setElementBlockSelection(editor,node.__prev);\n }\n}\n// 拷贝插入\nconst copyInsert = (action:number)=>{\n\n\n editor.update(() => {\n\n const selection = $getSelection();\n // 当前选中节点\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\n\n if(node){\n\n const oldNode = deepCloneNode(node)\n \n if(action == -1){\n node.insertBefore(oldNode)\n }\n else{\n node.insertAfter(oldNode)\n }\n }\n })\n \n}\n\n// 执行 aciton\nconst execAction = function(item:any){\n editor.update(()=>{\n item.action($getNodeByKey(selectPayload.value.nodeKey),editor.getElementByKey(selectPayload.value.nodeKey) )\n })\n}\n\nuseMounted(() => {\n return mergeRegister(\n editor.registerCommand(UPDATE_ELEMENTBLOCK_TOOLBAR_POS_COMMAND, () => updateToolsPos(), lowPriority),\n editor.registerUpdateListener(() => setTimeout(()=> updateToolsPos(),50)),\n // 点击选中\n editor.registerCommand<MouseEvent>(CLICK_COMMAND,(event:MouseEvent) => {\n \n const el = event.target as HTMLElement;\n const nodeKey = el?.getAttribute(\"node-key\");\n\n // 不为null的话则视为点击选中\n if(nodeKey != null){\n \n event.preventDefault();\n\n // 暂时不支持使用 shift 建 多选\n // if (!event.shiftKey) { \n // // 先取消\n // clearSelection(editor)\n // }\n setElementBlockSelection(editor,nodeKey);\n return true;\n }\n \n return false;\n }, lowPriority),\n // 选中元素快\n editor.registerCommand(SELECTED_ELEMENTBLOCK_COMMAND, (nodeKey) => {\n \n if (nodeKey != null) {\n\n const toolsbarList:any = [];\n\n const node = $getNodeByKey(nodeKey)\n\n if(node){\n\n shortcutToolsList.forEach(item=>{\n\n if(item.exist(node)){\n ((typeof item.tools == \"function\" ? item.tools(nodeKey) : item.tools) as Array<any>).forEach((toolsbar:any)=>{\n const index = toolsbarList.findIndex((b:any)=>b.key && toolsbar.key && b.key == toolsbar.key);\n if(index >= 0){\n toolsbarList.splice(index,1,toolsbar)\n }\n else{\n toolsbarList.push(toolsbar);\n }\n })\n }\n })\n }\n \n // 选中的元数据\n selectPayload.value = { nodeKey: nodeKey, toolsbars: toolsbarList };\n \n }\n else {\n selectPayload.value = null;\n }\n\n return updateToolsPos();\n }, lowPriority),\n // 删除模块\n editor.registerCommand(REMOVE_ELEMENTBLOCK_COMMAND, () => {\n\n const selection = $getSelection();\n\n // 当前选中节点\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\n\n // 删除\n if (node) {\n node.remove();\n // 没选中\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND, null);\n return true;\n }\n return false;\n }, lowPriority),\n // 选中的话\n editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {\n\n const selection = $getSelection();\n\n // 当前选中节点\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\n \n // 选中节点\n if(node){\n\n\n // 节点描述\n nodeTitle.value = (node as any).getTitle ? (node as any).getTitle() : \"\";\n\n // 选中模块 模块描述\n if($isModuleDecoratorNode(node)){\n const module = findLexicalEditorModule(node.__moduleName);\n if(module){ nodeTitle.value = module.title; }\n }\n\n // 根\n showTools.value = !$isRootNode(node)\n showMask.value = $isHtmlElementDecoratorNode(node);\n \n \n if(node?.__next){\n const nextNode = $getNodeByKey(node.__next);\n canSelectedNextNode.value = node?.__next ? $isElementNode(nextNode) && !$isParagraphNode(nextNode) : false;\n }\n else{\n canSelectedNextNode.value = false;\n }\n\n if(node?.__prev){\n const prevNode = $getNodeByKey(node.__prev);\n canSelectedPrevNode.value = node?.__prev ? $isElementNode(prevNode)&& !$isParagraphNode(prevNode) : false;\n }\n else{\n canSelectedPrevNode.value = false;\n }\n\n // 设置选中节点\n const nodeKey = node.getKey();\n const el = editor.getElementByKey(nodeKey);\n \n // 文本 p 根 不做选中 空的容器也不允许直接选中 模块容器除外\n if(nodeKey && el && !$isRootNode(node) && !$isTextNode(node)){\n\n if($isElementNode(node) && !$isModuleDecoratorWarpNode(node)){\n \n if(!node.isEmpty()){\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,nodeKey);\n return true;\n }\n \n }\n else{\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,nodeKey);\n return true;\n }\n \n }\n }\n nodeTitle.value = \"\";\n showTools.value = false;\n canSelectedNextNode.value = false;\n canSelectedPrevNode.value = false;\n editor.dispatchCommand(SELECTED_ELEMENTBLOCK_COMMAND,null);\n return false;\n },lowPriority)\n )\n})\n\n</script>\n\n<template>\n <div v-if=\"selectPayload != null && showTools\" ref=\"toolbarRef\" v-bind=\"$attrs\" class=\"mk-doc-editor-shortcut-tools-warp\" :style=\"toolsPos\">\n <el-button-group>\n <el-button v-if=\"nodeTitle\" text bg style=\"font-size: 14px;\">{{nodeTitle}}</el-button>\n <template v-for=\"item in selectPayload.toolsbars\">\n <el-tooltip effect=\"dark\" :content=\"item.title\" placement=\"top\">\n <el-button text @click=\"execAction(item)\">\n <MKSvgIcon :name=\"item.icon\" />\n </el-button>\n </el-tooltip>\n </template>\n <el-tooltip effect=\"dark\" content=\"删除\" placement=\"top\">\n <el-button text type=\"danger\" @click=\"editor.dispatchCommand(REMOVE_ELEMENTBLOCK_COMMAND, null)\">\n <MKSvgIcon name=\"ep:delete\" />\n </el-button>\n </el-tooltip>\n <el-popover popper-style=\"padding: 10px;width:auto;min-width:50px\">\n <template #reference>\n <el-button text>\n <MKSvgIcon name=\"ep:more-filled\" />\n </el-button>\n </template>\n <el-button-group class=\"flex\">\n \n <el-tooltip effect=\"dark\" content=\"上一个\" v-if=\"canSelectedPrevNode\" placement=\"top\">\n <el-button text @click=\"selectedPrevNode()\">\n <MKSvgIcon name=\"ep:caret-left\" />\n </el-button>\n </el-tooltip>\n <el-tooltip effect=\"dark\" content=\"拷贝自己插入到当前快之前\" placement=\"top\">\n <el-button text @click=\"copyInsert(-1)\">\n <MKSvgIcon name=\"ep:fold\" />\n </el-button>\n </el-tooltip>\n <el-tooltip effect=\"dark\" content=\"拷贝自己插入到当前快之后\" placement=\"top\">\n <el-button text @click=\"copyInsert(1)\">\n <MKSvgIcon name=\"ep:expand\" />\n </el-button>\n </el-tooltip>\n\n <el-tooltip effect=\"dark\" content=\"下一个\" v-if=\"canSelectedNextNode\" placement=\"top\">\n <el-button text @click=\"selectedNextNode()\">\n <MKSvgIcon name=\"ep:caret-right\" />\n </el-button>\n </el-tooltip>\n </el-button-group>\n </el-popover>\n </el-button-group>\n </div>\n <!-- 选中框 showMask -->\n <div v-if=\"selectPayload != null\" :style=\"\n {\n position:'absolute',boxSizing:'border-box',pointerEvents:'none',zIndex:0,outline:'2px solid rgb(131 176 248)',\n background:showMask ? '#03a9f417':'transparent',boxShadow: '0 0 10px 2px rgb(131 176 248)',\n ...selectionMarkPos\n }\n \"></div>\n</template>\n<style scoped lang=\"scss\">\n.mk-doc-editor-shortcut-tools-warp{\n position: absolute;\n z-index: 1;\n background-color: rgb(255, 255, 255);\n box-shadow: rgb(204, 204, 204) 1px -3px 7px 4px;\n padding: 5px;\n top: 15px;\n left: 494px;\n}\n\n</style>\n\n","<script setup lang=\"ts\">\n\nimport { useLexicalEditorState,useLexicalEditorContext } from '../composables'\nimport {MKSvgIcon} from \"../../SvgIcon\";\n\nconst props = defineProps({\n // doc | rich-text | mini\n mode:{ type:String,default:\"doc\" }\n})\n// 上下文\nconst { editor,toolbarExtendPlugins } = useLexicalEditorContext();\n\nconst { \n activeNode,\n canUndo,undoCommand,\n canRedo,redoCommand,\n canTextStyleDisabled,\n setTextStyle,\n fontFamily,fontFamilyOptions,\n fontSize,fontSizeOptions,\n fontColor,bgColor,\n canBold,canItalic,canStrikethrough,canUnderline,canSubscript,canSuperscript,\n canLink,\n alignList,alignValue,\n contentTypeList,curContentTypeDesc,setContentType\n} = useLexicalEditorState()\n\n</script>\n\n<template>\n <el-button-group v-if=\"mode=='doc'\">\n <el-button text :disabled=\"!canUndo\" @click=\"undoCommand()\">\n <MKSvgIcon name=\"ep:refresh-left\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button text :disabled=\"!canRedo\" @click=\"redoCommand()\">\n <MKSvgIcon name=\"ep:refresh-right\" class=\"font-size-[18px]\" />\n </el-button>\n </el-button-group>\n <el-divider v-if=\"mode=='doc'\" direction=\"vertical\" />\n <!-- 内容 -->\n <el-dropdown max-height=\"300px\">\n <el-button text>\n {{curContentTypeDesc}} <MKSvgIcon name=\"ep:arrow-down-bold\" class=\"ml-2\" />\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :class=\"{active:curContentTypeDesc === item.label}\" v-for=\"item in contentTypeList\" :value=\"item.value\" @click=\"setContentType(item.value)\">\n <div style=\"padding: 0 10px;\"> {{item.label}} </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-divider direction=\"vertical\" /> \n <!-- 字体 -->\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"canTextStyleDisabled\">\n {{fontFamily.label}} <MKSvgIcon name=\"ep:arrow-down-bold\" class=\"ml-2\" />\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :class=\"{active:fontFamily.label === item.label}\" v-for=\"item in fontFamilyOptions\" :value=\"item.value\" @click=\"setTextStyle('font-family',item.value)\">\n <span :style=\"{fontFamily:item.value}\">\n {{item.label}}\n </span>\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-divider direction=\"vertical\" /> \n <!-- 字体大小 -->\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\n <el-button text :disabled=\"canTextStyleDisabled\">\n {{fontSize}} <MKSvgIcon name=\"ep:arrow-down-bold\" class=\"ml-2\" />\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :class=\"{active:fontSize===item.label}\" v-for=\"item in fontSizeOptions\" :value=\"item.value\" @click=\"setTextStyle('font-size',item.value)\">{{item.label}}</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-divider direction=\"vertical\" /> \n <!-- 字体颜色 -->\n <el-tooltip effect=\"dark\" content=\"文字颜色\">\n <el-button text :disabled=\"canTextStyleDisabled\" class=\"font-color\">\n <el-color-picker v-model=\"fontColor\" :disabled=\"canTextStyleDisabled\" @change=\"($event:any)=>setTextStyle('color',$event)\" />\n <MKSvgIcon name=\"ep:arrow-down-bold\" />\n </el-button>\n </el-tooltip>\n \n <el-divider direction=\"vertical\" /> \n <!-- 背景颜色 -->\n <el-tooltip effect=\"dark\" content=\"背景颜色\">\n <el-button text :disabled=\"canTextStyleDisabled\" class=\"bg-color\">\n <el-color-picker v-model=\"bgColor\" :disabled=\"canTextStyleDisabled\" @change=\"($event:any)=>setTextStyle('background-color',$event)\" />\n <MKSvgIcon name=\"ep:arrow-down-bold\" />\n </el-button>\n </el-tooltip>\n\n <el-divider direction=\"vertical\" />\n <el-button-group class=\"font-style\">\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canBold ? 'active' : ''}`\" @click=\"setTextStyle('bold')\">\n <MKSvgIcon name=\"doc-bold\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canItalic ? 'active' : ''}`\" @click=\"setTextStyle('italic')\">\n <MKSvgIcon name=\"doc-italic\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canStrikethrough ? 'active' : ''}`\" @click=\"setTextStyle('strikethrough')\">\n <MKSvgIcon name=\"doc-strikethrough\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canUnderline ? 'active' : ''}`\" @click=\"setTextStyle('underline')\">\n <MKSvgIcon name=\"doc-underline\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canSubscript ? 'active' : ''}`\" @click=\"setTextStyle('subscript')\">\n <MKSvgIcon name=\"doc-sub\" class=\"font-size-[18px]\" />\n </el-button>\n <el-button :disabled=\"canTextStyleDisabled\" text :class=\"`${canSuperscript ? 'active' : ''}`\" @click=\"setTextStyle('superscript')\">\n <MKSvgIcon name=\"doc-sup\" class=\"font-size-[18px]\" />\n </el-button>\n </el-button-group>\n <el-divider direction=\"vertical\" />\n <el-dropdown max-height=\"300px\" :disabled=\"canTextStyleDisabled\">\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"canTextStyleDisabled\">\n <MKSvgIcon :name=\"`doc-text-${alignValue}`\" class=\"font-size-[18px]\" />\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item :class=\"{active:alignValue === item}\" v-for=\"item in alignList\" :value=\"item\" @click=\"setTextStyle('align', item)\">\n <MKSvgIcon :name=\"`doc-text-${item}`\" class=\"font-size-[18px]\" />\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n <el-divider direction=\"vertical\" />\n <!-- 链接 -->\n <el-button-group>\n <el-button text :disabled=\"canTextStyleDisabled\" :class=\"`${canLink ? 'active' : ''}`\" @click=\"setTextStyle('link')\">\n <MKSvgIcon v-if=\"!canLink\" name=\"doc-link\" class=\"font-size-[18px]\" />\n <MKSvgIcon v-else name=\"doc-unlink\" class=\"font-size-[18px]\" />\n </el-button>\n </el-button-group>\n <el-divider direction=\"vertical\" />\n <el-dropdown :disabled=\"toolbarExtendPlugins.filter(item=>item.disable ? !item.disable(activeNode!) : true).length<=0\">\n <el-button text :disabled=\"toolbarExtendPlugins.filter(item=>item.disable ? !item.disable(activeNode!) : true).length<=0\">\n <MKSvgIcon name=\"ep:plus\" class=\"mr-2\" /> 插入\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item v-for=\"item in toolbarExtendPlugins\" :key=\"item\" @click=\"item.action(editor)\" \n :disabled=\"item.disable ? item.disable(activeNode!) : false\">\n <MKSvgIcon :name=\"item.icon\" />\n {{item.text}}\n </el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n \n</template>\n<style scoped lang=\"scss\">\n :deep(.el-button){\n padding: 8px;\n }\n .font-color,.bg-color {\n :deep(.el-color-picker){\n position: absolute;\n left: 4px;\n z-index: 2;\n width: 100%;\n .el-color-picker__trigger{\n border:none;\n width: 100%;\n height: 28px;\n justify-content: start !important;\n .el-color-picker__color {\n width: 24px !important;\n .el-icon.is-icon-arrow-down{\n display: none;\n }\n }\n }\n }\n position: relative;\n width:60px;\n justify-content: end;\n padding: 8px;\n }\n</style>\n","\n\nimport { $createParagraphNode, $getNodeByKey, $getRoot, $getSelection, $isElementNode, $isNodeSelection, $isParagraphNode, $isRangeSelection, $isRootNode, COMMAND_PRIORITY_LOW, LexicalNode, NodeKey } from \"lexical\";\n\nimport { DRAG_DROP_PASTE, HeadingNode, QuoteNode } from '@lexical/rich-text'\nimport { CodeHighlightNode, CodeNode } from '@lexical/code'\nimport { $isLinkNode, $toggleLink, AutoLinkNode, LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link'\nimport { registerLexicalEditorPlugin, useLexicalEditorContext } from \"../composables\"\nimport { \n HtmlElementDecoratorNode,\n ModuleDecoratorNode,ModuleDecoratorWarpNode,\n HtmlElementNode,\n ImageNode,ImageTextWarpNode,\n $isImageNode,\n $isImageTextWarpNode,\n INSERT_IMAGETEXTWARP_COMMAND,\n $createImageTextWarpNode,\n INSERT_IMAGE_COMMAND,\n $createImageNode,\n INSERT_MODULE_COMMAND,\n ModulePropType,\n createModuleHtml,getModuleData,\n $isModuleDecoratorNode,\n $isModuleDecoratorWarpNode,\n INSERT_HTMLTEMPLATE_COMMAND,\n INSERT_TEMPLATE_COMMAND\n } from \"../nodes\"\nimport { $insertNodeToNearestRoot, isMimeType, mediaFileReader, mergeRegister } from \"@lexical/utils\";\nimport { generateNodesFromHtml, getCSSFromStyleObject, imageUpload, sanitizeUrl, showHtmlTemplateDialog, showImageEditDialog, showLinkEditDialog, showModuleSelectDialog, showTemplateSelectDialog } from \"../utils\";\nimport { ElLoading } from \"element-plus\";\nimport { createDefaultFormData, showDynamicFormDialoger } from \"../../DynamicFormPanel\";\n\n// 上传处理函数\nconst uploadHandle = async (pathList: Array<string>) => {\n\n if (pathList.length) {\n\n const loadingInstance = ElLoading.service({ fullscreen: true, text: \"图片上传中...\" })\n\n const result = await Promise.all(pathList.map(path => imageUpload(path)))\n\n loadingInstance.close();\n\n return result;\n }\n\n return [];\n}\n\n// 插入节点的处理函数\nconst insertNodeHandle = (node: LexicalNode,selectNode:LexicalNode) => {\n\n // 模块\n if ($isModuleDecoratorNode(node) && !$isModuleDecoratorWarpNode(node)) {\n const moduleWarp = new ModuleDecoratorWarpNode();\n moduleWarp.append(node);\n node = moduleWarp;\n }\n\n // 图片\n if($isImageNode(node)){\n const p = $createParagraphNode();\n p.append(node)\n node = p;\n }\n if ($isElementNode(selectNode) && !$isParagraphNode(selectNode)) {\n selectNode.append(node);\n } \n else if ($isParagraphNode(selectNode)) {\n selectNode.replace(node);\n } \n else{\n $insertNodeToNearestRoot(node);\n }\n \n}\n\n// 插入节点的处理函数\nconst insertNodesHandle = (...nodes: Array<LexicalNode>) => {\n\n const selection = $getSelection()\n let selectNode = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : $getRoot());\n\n nodes.forEach(node=> insertNodeHandle(node,selectNode))\n\n return false;\n}\n\n// 注册插件\nregisterLexicalEditorPlugin({\n nodes:[\n AutoLinkNode, LinkNode,\n CodeHighlightNode, CodeNode ,\n HeadingNode, QuoteNode ,\n HtmlElementDecoratorNode,\n ModuleDecoratorNode,ModuleDecoratorWarpNode,\n HtmlElementNode,\n ImageNode,ImageTextWarpNode\n ],\n tools:[\n {\n icon: \"ep:picture\",\n text: \"图片\",\n action:(editor)=>{\n // 显示图片编辑面板\n showImageEditDialog({\n src: \"\", alt: \"\", width: \"\", height: \"\", maxWidth: \"100%\", maxHeight: \"\", margin: \"\"\n }).then(async (data: any) => {\n const result = await uploadHandle([data.src])\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, { \n src:result[0] as string,\n alt:data.alt,\n style:getCSSFromStyleObject({\n \"width\":data.width,\"height\":data.height,\n \"max-width\":data.maxWidth,\n \"max-height\":data.maxHeight,\"margin\":data.margin\n }) \n })\n });\n },\n disable:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:99\n },\n {\n icon: \"ep:grid\",\n text: \"模块\",\n action:async (editor)=>{\n // 打开模块面板\n const result = (await showModuleSelectDialog(editor._config.namespace)) as any;\n const defaultData = createDefaultFormData(result.options);\n editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\n }, \n disable:(node)=>!$isElementNode(node) && !$isRootNode(node),\n sort:99\n },\n {\n icon:\"ms-template\",\n text:\"模版\",\n action:async (editor)=>{\n editor.dispatchCommand(INSERT_TEMPLATE_COMMAND,await showTemplateSelectDialog(editor._config.namespace))\n }, \n disable:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:99\n },\n {\n icon: \"ms-image-text\",\n text: \"图文环绕\",\n action:(editor)=>{\n editor.dispatchCommand(INSERT_IMAGETEXTWARP_COMMAND,null)\n }, \n disable:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:99\n },\n {\n icon:\"ms-template\",\n text:\"HTML模版\",\n action:async (editor)=>{\n editor.dispatchCommand(INSERT_HTMLTEMPLATE_COMMAND,await showHtmlTemplateDialog())\n },\n disable:(node)=>!$isElementNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:89\n }\n ],\n shortcutTools:editor=>{\n\n const { findLexicalEditorModule } = useLexicalEditorContext(editor._config.namespace)\n\n return [\n // 默认编辑\n // {\n // exist:(node)=>$isHtmlElementNode(node) || $isHtmlElementDecoratorNode(node),\n // tools:[\n // {\n // key:\"edit\",title: \"编辑\", icon: \"ep:edit\", action: async (editNode:LexicalNode) => {\n // console.log(\"编辑\")\n // // // 打开模块面板\n // // const result = (await showModuleSelectDialog()) as ModuleType;\n // // const defaultData = createDefaultFormData(result.options);\n // // // 插入模块\n // // editor.dispatchCommand(INSERT_MODULE_COMMAND, { name: result.name, data: defaultData })\n // }\n // }\n // ]\n // },\n // 超链接\n {\n exist:(node)=>$isLinkNode(node),\n tools:[\n {\n key:\"edit\",title: \"编辑\", icon: \"ep:edit\", action: async (editNode:LinkNode) => {\n \n // 显示图片编辑面板\n showLinkEditDialog(editor.read(()=>editNode.getURL())).then((href:any)=>{\n if(href.trim()){\n editor.update(()=>{\n editNode.getWritable().setURL(sanitizeUrl(href))\n })\n }\n else{\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\n }\n })\n \n }\n }\n ]\n },\n // 模块\n {\n exist:(node)=>$isModuleDecoratorNode(node),\n tools:[\n {\n key:\"edit\",title: \"编辑\", icon: \"ep:edit\", action: async (editNode:ModuleDecoratorNode) => {\n const module = findLexicalEditorModule(editNode.__moduleName);\n if(module){\n const result = await showDynamicFormDialoger(module.title,module.options,getModuleData(editNode.__moduleHtml,module.options))\n editor.update(() => editNode.setHtml(createModuleHtml(module.template,result)))\n }\n }\n }\n ]\n },\n // 图片编辑\n {\n exist:(node)=>$isImageNode(node),\n tools:(nodeKey) => {\n \n const node = $getNodeByKey(nodeKey as NodeKey);\n \n if ($isImageNode(node)) {\n \n const parent = node.getParent();\n \n // 是否是文本环绕里面的图\n const isImageTextWarp = $isImageTextWarpNode(parent)\n \n // 工具条\n const toolbarList:Array<any> = [\n {\n key:\"edit\",title: \"编辑\", icon: \"ep:edit\", action: async (editNode:ImageNode) => {\n \n const {src,alt,style} = { style:editNode.getStyleObj(),src:editNode.__src,alt:editNode.__alt }\n \n const data: any = await showImageEditDialog({\n src, alt, \n width: style.width || \"\", height: style.height || \"\", \n maxWidth: style[\"max-width\"] || \"\", maxHeight: style[\"max-height\"] || \"\",\n margin: style.margin || \"\"\n }) \n \n const result = await uploadHandle([data.src])\n \n editor.update(()=>{\n\n node.setSrc(result[0] as string)\n node.setAlt(data.alt)\n node.addStyle({\n \"width\":data.width,\"height\":data.height,\n \"max-width\":data.maxWidth,\n \"max-height\":data.maxHeight,\n \"margin\":data.margin\n })\n })\n }\n }\n ];\n \n // 左对齐\n if($isParagraphNode(parent) || isImageTextWarp){\n toolbarList.push({ title: isImageTextWarp ? \"居左\" : \"左对齐\",icon:`doc-text-left`,action:async (editNode:ImageNode)=>{\n editor.update(()=>{\n if(isImageTextWarp){\n editNode.addStyle({ 'float':\"left\" })\n }\n else {\n parent.setFormat(\"left\")\n }\n })\n }\n });\n }\n \n // 居中对齐\n if($isParagraphNode(parent) && !isImageTextWarp){\n toolbarList.push({ title: \"居中对齐\",icon:`doc-text-center`,action:async ()=>{\n editor.update(()=>parent.setFormat(\"center\") )\n }\n });\n }\n \n // 右对齐\n if($isParagraphNode(parent) || isImageTextWarp){\n toolbarList.push({ title: isImageTextWarp ? \"居右\" : \"右对齐\",icon:`doc-text-right`,action:async ()=>{\n editor.update(()=>{\n if(isImageTextWarp){\n node.addStyle({ 'float':\"right\" })\n }\n else {\n parent.setFormat(\"right\")\n }\n })\n }\n });\n }\n \n return toolbarList;\n }\n \n return null;\n }\n }\n ]\n },\n templates:[],\n useMounted(editor){\n \n const { findLexicalEditorModule,findLexicalEditorTemplate } = useLexicalEditorContext(editor._config.namespace)\n\n \n // 注册指令\n return mergeRegister(\n // // 插入布局格子\n // editor.registerCommand<LayoutGridNodeAttrType>(INSERT_LAYOUTGRID_COMMAND, (payload) => {\n\n // insertGridHandle(new LayoutGridNode(payload));\n\n // return true\n // }, COMMAND_PRIORITY_EDITOR),\n // // 插入文本格子\n // editor.registerCommand<TextGridNodeAttrType>(INSERT_TEXTGRID_COMMAND, (payload) => {\n\n // const textGrid = new TextGridNode(payload)\n // textGrid.append($createParagraphNode())\n // textGrid.append($createParagraphNode())\n // textGrid.append($createParagraphNode())\n // textGrid.append($createParagraphNode())\n // textGrid.append($createParagraphNode())\n // textGrid.append($createParagraphNode())\n // insertGridHandle(textGrid);\n\n // return true\n // }, COMMAND_PRIORITY_EDITOR),\n // // 插入模块格子\n // editor.registerCommand<ModuleGridNodeAttrType>(INSERT_MODULEGRID_COMMAND, (payload) => {\n // insertGridHandle(new ModuleGridNode(payload));\n // return true\n // }, COMMAND_PRIORITY_EDITOR),\n // 插入模块\n editor.registerCommand<ModulePropType>(INSERT_MODULE_COMMAND,(payload) => {\n\n const module = findLexicalEditorModule(payload.name)\n\n if(module){\n insertNodesHandle(new ModuleDecoratorNode(payload.name,createModuleHtml(module.template,payload.data)))\n }\n \n return true\n },COMMAND_PRIORITY_LOW),\n // 插入图文环绕\n editor.registerCommand<null>(INSERT_IMAGETEXTWARP_COMMAND, () => insertNodesHandle($createImageTextWarpNode()), COMMAND_PRIORITY_LOW),\n // 插入图片\n editor.registerCommand(INSERT_IMAGE_COMMAND, (payload) => {\n return insertNodesHandle($createImageNode(payload.src,payload.alt,\"\",payload.style))\n }, COMMAND_PRIORITY_LOW),\n // 剪切板图片\n editor.registerCommand(DRAG_DROP_PASTE, (files) => {\n const types = [\n 'image/',\n 'image/heic',\n 'image/heif',\n 'image/gif',\n 'image/webp',\n ];\n\n (async () => {\n\n const filesResult = await mediaFileReader(files, [types].flatMap((x) => x))\n\n const result = await uploadHandle(filesResult.filter(f => isMimeType(f.file, types)).map(f => f.result))\n\n result.forEach((path) => {\n editor.dispatchCommand(INSERT_IMAGE_COMMAND, { src: path as string, alt: \"\", style:\"max-width:100%\"})\n })\n })()\n\n return true\n }, COMMAND_PRIORITY_LOW),\n // 插入模版\n editor.registerCommand<string>(INSERT_TEMPLATE_COMMAND,(name) => {\n\n const template = findLexicalEditorTemplate(name);\n \n const templateNodes = template ? generateNodesFromHtml(editor, template.template) : [];\n \n insertNodesHandle(...templateNodes)\n \n return true\n },COMMAND_PRIORITY_LOW),\n \n // 插入HTML模版\n editor.registerCommand<string>(INSERT_HTMLTEMPLATE_COMMAND,(html) => {\n\n const templateNodes = generateNodesFromHtml(editor, html);\n insertNodesHandle(...templateNodes)\n \n return true\n },COMMAND_PRIORITY_LOW),\n //链接\n editor.registerCommand(TOGGLE_LINK_COMMAND,(payload) => {\n if (payload === null) {\n $toggleLink(payload)\n return true\n }\n else if (typeof payload === 'string') {\n $toggleLink(payload)\n return false\n }\n else {\n const { url, target, rel, title } = payload\n $toggleLink(url, { rel, target, title })\n return true\n }\n }, COMMAND_PRIORITY_LOW)\n );\n }\n})\n","\n\nimport { mergeRegister } from \"@lexical/utils\";\nimport type { TextNode } from 'lexical'\nimport { $createHashtagNode, HashtagNode } from '@lexical/hashtag'\nimport { registerLexicalEditorPlugin } from '../composables'\nimport { registerLexicalTextEntity } from \"@lexical/text\";\n\nfunction getHashtagRegexStringChars(): {\n alpha: string\n alphanumeric: string\n hashChars: string\n} {\n // Latin accented characters\n // Excludes 0xd7 from the range\n // (the multiplication sign, confusable with \"x\").\n // Also excludes 0xf7, the division sign\n const latinAccents\n = '\\xC0-\\xD6'\n + '\\xD8-\\xF6'\n + '\\xF8-\\xFF'\n + '\\u0100-\\u024F'\n + '\\u0253-\\u0254'\n + '\\u0256-\\u0257'\n + '\\u0259'\n + '\\u025B'\n + '\\u0263'\n + '\\u0268'\n + '\\u026F'\n + '\\u0272'\n + '\\u0289'\n + '\\u028B'\n + '\\u02BB'\n + '\\u0300-\\u036F'\n + '\\u1E00-\\u1EFF'\n\n // Cyrillic (Russian, Ukrainian, etc.)\n const nonLatinChars\n = '\\u0400-\\u04FF' // Cyrillic\n + '\\u0500-\\u0527' // Cyrillic Supplement\n + '\\u2DE0-\\u2DFF' // Cyrillic Extended A\n + '\\uA640-\\uA69F' // Cyrillic Extended B\n + '\\u0591-\\u05BF' // Hebrew\n + '\\u05C1-\\u05C2'\n + '\\u05C4-\\u05C5'\n + '\\u05C7'\n + '\\u05D0-\\u05EA'\n + '\\u05F0-\\u05F4'\n + '\\uFB12-\\uFB28' // Hebrew Presentation Forms\n + '\\uFB2A-\\uFB36'\n + '\\uFB38-\\uFB3C'\n + '\\uFB3E'\n + '\\uFB40-\\uFB41'\n + '\\uFB43-\\uFB44'\n + '\\uFB46-\\uFB4F'\n + '\\u0610-\\u061A' // Arabic\n + '\\u0620-\\u065F'\n + '\\u066E-\\u06D3'\n + '\\u06D5-\\u06DC'\n + '\\u06DE-\\u06E8'\n + '\\u06EA-\\u06EF'\n + '\\u06FA-\\u06FC'\n + '\\u06FF'\n + '\\u0750-\\u077F' // Arabic Supplement\n + '\\u08A0' // Arabic Extended A\n + '\\u08A2-\\u08AC'\n + '\\u08E4-\\u08FE'\n + '\\uFB50-\\uFBB1' // Arabic Pres. Forms A\n + '\\uFBD3-\\uFD3D'\n + '\\uFD50-\\uFD8F'\n + '\\uFD92-\\uFDC7'\n + '\\uFDF0-\\uFDFB'\n + '\\uFE70-\\uFE74' // Arabic Pres. Forms B\n + '\\uFE76-\\uFEFC'\n + '\\u200C-\\u200C' // Zero-Width Non-Joiner\n + '\\u0E01-\\u0E3A' // Thai\n + '\\u0E40-\\u0E4E' // Hangul (Korean)\n + '\\u1100-\\u11FF' // Hangul Jamo\n + '\\u3130-\\u3185' // Hangul Compatibility Jamo\n + '\\uA960-\\uA97F' // Hangul Jamo Extended-A\n + '\\uAC00-\\uD7AF' // Hangul Syllables\n + '\\uD7B0-\\uD7FF' // Hangul Jamo Extended-B\n + '\\uFFA1-\\uFFDC' // Half-width Hangul\n\n const charCode = String.fromCharCode\n\n const cjkChars\n = '\\u30A1-\\u30FA\\u30FC-\\u30FE' // Katakana (full-width)\n + '\\uFF66-\\uFF9F' // Katakana (half-width)\n + '\\uFF10-\\uFF19\\uFF21-\\uFF3A'\n + '\\uFF41-\\uFF5A' // Latin (full-width)\n + '\\u3041-\\u3096\\u3099-\\u309E' // Hiragana\n + '\\u3400-\\u4DBF' // Kanji (CJK Extension A)\n + `\\u4E00-\\u9FFF${// Kanji (Unified)\n // Disabled as it breaks the Regex.\n // charCode(0x20000) + '-' + charCode(0x2A6DF) + // Kanji (CJK Extension B)\n charCode(0x2A700)\n }-${\n charCode(0x2B73F) // Kanji (CJK Extension C)\n }${charCode(0x2B740)\n }-${\n charCode(0x2B81F) // Kanji (CJK Extension D)\n }${charCode(0x2F800)\n }-${\n charCode(0x2FA1F)\n }\\u3003\\u3005\\u303B` // Kanji (CJK supplement)\n\n const otherChars = latinAccents + nonLatinChars + cjkChars\n\n // equivalent of \\p{L}\n const unicodeLetters\n = '\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6'\n + '\\u00F8-\\u0241\\u0250-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EE\\u037A\\u0386'\n + '\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03F5\\u03F7-\\u0481'\n + '\\u048A-\\u04CE\\u04D0-\\u04F9\\u0500-\\u050F\\u0531-\\u0556\\u0559\\u0561-\\u0587'\n + '\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0640-\\u064A\\u066E-\\u066F'\n + '\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710'\n + '\\u0712-\\u072F\\u074D-\\u076D\\u0780-\\u07A5\\u07B1\\u0904-\\u0939\\u093D\\u0950'\n + '\\u0958-\\u0961\\u097D\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0'\n + '\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1'\n + '\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33'\n + '\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D'\n + '\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD'\n + '\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30'\n + '\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83'\n + '\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F'\n + '\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10'\n + '\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60-\\u0C61\\u0C85-\\u0C8C'\n + '\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE'\n + '\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39'\n + '\\u0D60-\\u0D61\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6'\n + '\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88'\n + '\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7'\n + '\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6'\n + '\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6A\\u0F88-\\u0F8B\\u1000-\\u1021'\n + '\\u1023-\\u1027\\u1029-\\u102A\\u1050-\\u1055\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC'\n + '\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D'\n + '\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0'\n + '\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310'\n + '\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C'\n + '\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711'\n + '\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7'\n + '\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974'\n + '\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1D00-\\u1DBF\\u1E00-\\u1E9B'\n + '\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D'\n + '\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC'\n + '\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC'\n + '\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107'\n + '\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D'\n + '\\u212F-\\u2131\\u2133-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u2C00-\\u2C2E'\n + '\\u2C30-\\u2C5E\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96'\n + '\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6'\n + '\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3006\\u3031-\\u3035'\n + '\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF'\n + '\\u3105-\\u312C\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400-\\u4DB5'\n + '\\u4E00-\\u9FBB\\uA000-\\uA48C\\uA800-\\uA801\\uA803-\\uA805\\uA807-\\uA80A'\n + '\\uA80C-\\uA822\\uAC00-\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9'\n + '\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C'\n + '\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F'\n + '\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A'\n + '\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7'\n + '\\uFFDA-\\uFFDC'\n\n // equivalent of \\p{Mn}\\p{Mc}\n const unicodeAccents\n = '\\u0300-\\u036F\\u0483-\\u0486\\u0591-\\u05B9\\u05BB-\\u05BD\\u05BF'\n + '\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u0615\\u064B-\\u065E\\u0670'\n + '\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A'\n + '\\u07A6-\\u07B0\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962-\\u0963'\n + '\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CD\\u09D7'\n + '\\u09E2-\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D'\n + '\\u0A70-\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD'\n + '\\u0AE2-\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47-\\u0B48\\u0B4B-\\u0B4D'\n + '\\u0B56-\\u0B57\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7'\n + '\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56'\n + '\\u0C82-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6'\n + '\\u0D02-\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D82-\\u0D83'\n + '\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0E31\\u0E34-\\u0E3A'\n + '\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19'\n + '\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F90-\\u0F97'\n + '\\u0F99-\\u0FBC\\u0FC6\\u102C-\\u1032\\u1036-\\u1039\\u1056-\\u1059\\u135F'\n + '\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B6-\\u17D3\\u17DD'\n + '\\u180B-\\u180D\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u19B0-\\u19C0\\u19C8-\\u19C9'\n + '\\u1A17-\\u1A1B\\u1DC0-\\u1DC3\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20EB\\u302A-\\u302F'\n + '\\u3099-\\u309A\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uFB1E\\uFE00-\\uFE0F'\n + '\\uFE20-\\uFE23'\n\n // equivalent of \\p{Dn}\n const unicodeDigits\n = '\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF'\n + '\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F'\n + '\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29'\n + '\\u1040-\\u1049\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9'\n + '\\uFF10-\\uFF19'\n // An alpha char is a unicode chars including unicode marks or\n // letter or char in otherChars range\n const alpha = unicodeLetters + unicodeAccents + otherChars\n // A numeric character is any with the number digit property, or\n // underscore. These characters can be included in hashtags, but a hashtag\n // cannot have only these characters.\n const numeric = `${unicodeDigits}_`\n // Alphanumeric char is any alpha char or a unicode char with decimal\n // number property \\p{Nd}\n const alphanumeric = alpha + numeric\n\n const hashChars = '#\\\\uFF03' // normal '#' or full-width '#'\n\n return {\n alpha,\n alphanumeric,\n hashChars,\n }\n}\n\nfunction getHashtagRegexString(): string {\n const { alpha, alphanumeric, hashChars } = getHashtagRegexStringChars()\n\n const hashtagAlpha = `[${alpha}]`\n const hashtagAlphanumeric = `[${alphanumeric}]`\n const hashtagBoundary = `^|$|[^&/${alphanumeric}]`\n const hashCharList = `[${hashChars}]`\n\n // A hashtag contains characters, numbers and underscores,\n // but not all numbers.\n const hashtag\n = `(${\n hashtagBoundary\n })(${\n hashCharList\n })(${\n hashtagAlphanumeric\n }*${\n hashtagAlpha\n }${hashtagAlphanumeric\n }*)`\n\n return hashtag\n}\n\nconst REGEX = new RegExp(getHashtagRegexString(), 'i')\n\n\nfunction createHashtagNode(textNode: TextNode) {\n return $createHashtagNode(textNode.getTextContent())\n}\n\nfunction getHashtagMatch(text: string) {\n const matchArr = REGEX.exec(text)\n if (matchArr === null)\n return null\n\n const hashtagLength = matchArr[3].length + 1\n const startOffset = matchArr.index + matchArr[1].length\n const endOffset = startOffset + hashtagLength\n return { end: endOffset, start: startOffset }\n}\n\n\n// 注册插件\nregisterLexicalEditorPlugin({\n nodes:[HashtagNode],\n tools:[],\n templates:[],\n useMounted(editor){\n\n if (!editor.hasNodes([HashtagNode])){\n throw new Error(\"HashtagPlugin: HashtagNode not registered on editor\");\n }\n\n // 注册事件\n return mergeRegister( ...registerLexicalTextEntity(editor, getHashtagMatch, HashtagNode, createHashtagNode),);\n }\n})\n","\n\nimport {\n $handleListInsertParagraph,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n // insertList,\n removeList,\n ListItemNode, ListNode,\n $createListNode,\n $isListItemNode,\n $createListItemNode,\n} from '@lexical/list'\nimport { $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport { $getSelection, $isElementNode, $isNodeSelection, $isParagraphNode, $isRangeSelection, $isRootNode, $isTextNode, COMMAND_PRIORITY_LOW, ElementNode, INSERT_PARAGRAPH_COMMAND, LexicalEditor, LexicalNode } from 'lexical'\nimport { registerLexicalEditorPlugin } from '../composables'\nimport { $isModuleDecoratorWarpNode } from '../nodes'\n\n// 插入节点的处理函数\nexport const insertListNode= (listType:any) => {\n\n const selection = $getSelection()\n const list = $createListNode(listType);\n const listItem = $createListItemNode();\n\n let elementNode = $isNodeSelection(selection) ? selection?.getNodes()[0] : ($isRangeSelection(selection) ? selection.anchor.getNode() : null);\n\n \n // 文本则做特殊处理\n if($isTextNode(elementNode)){\n elementNode = elementNode.getParent() as ElementNode;\n }\n \n if($isParagraphNode(elementNode)){\n listItem.splice(elementNode.getChildrenSize(), 0, elementNode.getChildren());\n list.append(listItem);\n elementNode.replace(list);\n }\n else if ($isListItemNode(elementNode)) {\n const parent = elementNode.getParentOrThrow();\n parent.append()\n list.append(...parent.getChildren())\n list.append(listItem);\n parent.replace(list);\n }\n else if($isElementNode(elementNode)){\n list.append(listItem);\n elementNode.append(list);\n }\n else {\n list.append(listItem);\n $insertNodeToNearestRoot(list)\n }\n return false;\n}\n\n// 注册插件\nregisterLexicalEditorPlugin({\n nodes:[ListNode,ListItemNode],\n tools:[\n {\n icon: \"doc-list-bullet\",\n text: \"无序列表\",\n action:(editor)=>{\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND,undefined)\n },\n disable:(node)=>!$isElementNode(node) && !$isTextNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:99\n },\n {\n icon: \"doc-list-number\",\n text: \"数字列表\",\n action:(editor)=>{\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND,undefined)\n },\n disable:(node)=>!$isElementNode(node) && !$isTextNode(node) && !$isRootNode(node) || $isModuleDecoratorWarpNode(node),\n sort:99\n }\n ],\n templates:[],\n useMounted(editor){\n \n // 注册事件\n return mergeRegister(\n editor.registerCommand(INSERT_ORDERED_LIST_COMMAND,() => {\n insertListNode('number')\n return true\n },COMMAND_PRIORITY_LOW),\n editor.registerCommand(INSERT_UNORDERED_LIST_COMMAND,() => {\n insertListNode('bullet')\n return true\n },COMMAND_PRIORITY_LOW),\n editor.registerCommand(REMOVE_LIST_COMMAND,() => {\n removeList(editor)\n return true\n },COMMAND_PRIORITY_LOW,),\n editor.registerCommand(INSERT_PARAGRAPH_COMMAND,() => {\n return !!$handleListInsertParagraph()\n },COMMAND_PRIORITY_LOW)\n );\n }\n})\n","\n\nimport type { ListItemNode } from '@lexical/list'\nimport {\n $getNearestNodeFromDOMNode,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_LEFT_COMMAND,\n KEY_ARROW_UP_COMMAND,\n KEY_ESCAPE_COMMAND,\n KEY_SPACE_COMMAND,\n} from 'lexical'\nimport type { LexicalEditor } from 'lexical'\n\nimport {\n $isListItemNode,\n $isListNode,\n INSERT_CHECK_LIST_COMMAND,\n insertList,\n} from '@lexical/list'\nimport { $findMatchingParent, mergeRegister } from '@lexical/utils'\nimport { registerClickAndPointerListeners } from '../composables'\nimport { registerLexicalEditorPlugin } from \"../composables\"\n\nfunction listenPointerDown() {\n return registerClickAndPointerListeners(() => {\n // @ts-expect-error: speculation ambiguous\n document.addEventListener('click', handleClick)\n document.addEventListener('pointerdown', handlePointerDown)\n }, () => {\n // @ts-expect-error: speculation ambiguous\n document.removeEventListener('click', handleClick)\n document.removeEventListener('pointerdown', handlePointerDown)\n })\n}\n\nfunction handleCheckItemEvent(event: PointerEvent, callback: () => void) {\n const target = event.target\n if (!(target instanceof HTMLElement))\n return\n\n // Ignore clicks on LI that have nested lists\n // @ts-expect-error: internal field\n const firstChild: HTMLElement | null = target.firstChild\n if (\n firstChild != null\n && (firstChild.tagName === 'UL' || firstChild.tagName === 'OL')\n ) {\n return\n }\n\n const parentNode = target.parentNode\n // @ts-expect-error: Internal field\n if (!parentNode || parentNode.__lexicalListType !== 'check')\n return\n\n const pageX = event.pageX\n const rect = target.getBoundingClientRect()\n\n if (\n target.dir === 'rtl'\n ? pageX < rect.right && pageX > rect.right - 20\n : pageX > rect.left && pageX < rect.left + 20\n ) {\n callback()\n }\n}\n\nfunction handleClick(event: PointerEvent) {\n handleCheckItemEvent(event as PointerEvent, () => {\n const domNode = event.target as HTMLElement\n const editor = findEditor(domNode)\n\n if (editor !== null) {\n editor.update(() => {\n const node = $getNearestNodeFromDOMNode(domNode)\n if ($isListItemNode(node!)) {\n domNode.focus()\n node.toggleChecked()\n }\n })\n }\n })\n}\n\nfunction handlePointerDown(event: PointerEvent) {\n handleCheckItemEvent(event, () => {\n // Prevents caret moving when clicking on check mark\n event.preventDefault()\n })\n}\n\nfunction findEditor(target: Node) {\n let node: ParentNode | Node | null = target\n\n while (node) {\n // @ts-expect-error internal field\n if (node.__lexicalEditor)\n // @ts-expect-error internal field\n return (node.__lexicalEditor)\n\n node = node.parentNode\n }\n return null\n}\n\nfunction getActiveCheckListItem(): HTMLElement | Element | null {\n const { activeElement } = document\n return activeElement !== null\n && activeElement.tagName === 'LI'\n && activeElement.parentNode !== null\n // @ts-expect-error: internal field missing\n && activeElement.parentNode.__lexicalListType === 'check'\n ? activeElement\n : null\n}\n\nfunction findCheckListItemSibling(\n node: ListItemNode,\n backward: boolean,\n): ListItemNode | null {\n let sibling = backward ? node.getPreviousSibling() : node.getNextSibling()\n let parent = node\n // Going up in a tree to get non-null sibling\n while (sibling == null && $isListItemNode(parent)) {\n // Get li -> parent ul/ol -> parent li\n parent = parent.getParentOrThrow().getParent() as ListItemNode\n if (parent !== null) {\n sibling = backward\n ? parent.getPreviousSibling()\n : parent.getNextSibling()\n }\n }\n\n // Going down in a tree to get first non-nested list item\n while ($isListItemNode(sibling!)) {\n const firstChild = backward\n ? sibling.getLastChild()\n : sibling.getFirstChild()\n if (!$isListNode(firstChild!))\n return sibling\n\n sibling = backward ? firstChild.getLastChild() : firstChild.getFirstChild()\n }\n\n return null\n}\n\nfunction handleArrownUpOrDown( \n event: KeyboardEvent,\n editor: LexicalEditor,\n backward: boolean,\n) {\n const activeItem = getActiveCheckListItem()\n\n if (activeItem != null) {\n editor.update(() => {\n const listItem = $getNearestNodeFromDOMNode(activeItem)\n if (!$isListItemNode(listItem!))\n return\n\n const nextListItem = findCheckListItemSibling(listItem, backward)\n if (nextListItem != null) {\n nextListItem.selectStart()\n const dom = editor.getElementByKey(nextListItem.__key)\n if (dom != null) {\n event.preventDefault()\n setTimeout(() => {\n dom.focus()\n }, 0)\n }\n }\n })\n }\n\n return false\n}\n\n// 注册插件\nregisterLexicalEditorPlugin({\n nodes:[\n \n ],\n tools:[\n \n ],\n templates:[],\n useMounted(editor){\n \n // 注册指令\n return mergeRegister(\n editor.registerCommand(INSERT_CHECK_LIST_COMMAND,\n () => {\n insertList(editor, 'check')\n return true\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ARROW_DOWN_COMMAND,\n (event) => {\n return handleArrownUpOrDown(event, editor, false)\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ARROW_UP_COMMAND,\n (event) => {\n return handleArrownUpOrDown(event, editor, true)\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(\n KEY_ESCAPE_COMMAND,\n (_event) => {\n const activeItem = getActiveCheckListItem()\n if (activeItem != null) {\n const rootElement = editor.getRootElement()\n if (rootElement != null)\n rootElement.focus()\n \n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(KEY_SPACE_COMMAND,(event) => {\n const activeItem = getActiveCheckListItem()\n if (activeItem != null) {\n editor.update(() => {\n const listItemNode = $getNearestNodeFromDOMNode(activeItem)\n if ($isListItemNode(listItemNode!)) {\n event.preventDefault()\n listItemNode.toggleChecked()\n }\n })\n return true\n }\n return false\n },\n COMMAND_PRIORITY_LOW,\n ),\n editor.registerCommand(KEY_ARROW_LEFT_COMMAND,(event) => {\n return editor.getEditorState().read(() => {\n const selection = $getSelection()\n if ($isRangeSelection(selection) && selection.isCollapsed()) {\n const { anchor } = selection\n const isElement = anchor.type === 'element'\n if (isElement || anchor.offset === 0) {\n const anchorNode = anchor.getNode()\n const elementNode = $findMatchingParent(\n anchorNode,\n node => $isElementNode(node) && !node.isInline(),\n )\n \n if ($isListItemNode(elementNode)) {\n const parent = elementNode.getParent()\n if (\n $isListNode(parent)\n && parent.getListType() === 'check'\n && (isElement\n || elementNode.getFirstDescendant() === anchorNode)\n ) {\n const domNode = editor.getElementByKey(elementNode.__key)\n \n if (domNode != null && document.activeElement !== domNode) {\n domNode.focus()\n event.preventDefault()\n return true\n }\n }\n }\n }\n }\n \n return false\n })\n },\n COMMAND_PRIORITY_LOW,\n ),\n listenPointerDown(),\n );\n }\n})\n","\n\nimport type {\n HTMLTableElementWithWithTableSelectionState,\n InsertTableCommandPayload,\n TableObserver,\n} from '@lexical/table'\nimport {\n $computeTableMap,\n $createTableCellNode,\n $createTableNodeWithDimensions,\n $getNodeTriplet,\n $isTableCellNode,\n $isTableNode,\n $isTableRowNode,\n INSERT_TABLE_COMMAND,\n TableCellNode,\n TableNode,\n TableRowNode,\n applyTableHandlers,\n} from '@lexical/table'\nimport { $insertFirst, $insertNodeToNearestRoot, mergeRegister } from '@lexical/utils'\nimport type {\n NodeKey,\n} from 'lexical'\nimport {\n $getNodeByKey,\n $isTextNode,\n $nodesOfType,\n COMMAND_PRIORITY_EDITOR,\n} from 'lexical'\n\nimport { useEffect, registerLexicalEditorPlugin } from '../composables'\n\n// 注册插件\nregisterLexicalEditorPlugin({\n nodes:[TableCellNode, TableNode, TableRowNode],\n tools:[],\n templates:[],\n useMounted(editor){\n\n if (!editor.hasNodes([TableNode, TableCellNode, TableRowNode])) {\n throw new Error('TablePlugin: TableNode, TableCellNode or TableRowNode not registered on editor')\n }\n\n // Unmerge cells when the feature isn't enabled\n useEffect(() => {\n return editor.registerNodeTransform(TableCellNode, (node) => {\n if (node.getColSpan() > 1 || node.getRowSpan() > 1) {\n // When we have rowSpan we have to map the entire Table to understand where the new Cells\n // fit best; let's analyze all Cells at once to save us from further transform iterations\n const [, , gridNode] = $getNodeTriplet(node)\n const [gridMap] = $computeTableMap(gridNode, node, node)\n // TODO this function expects Tables to be normalized. Look into this once it exists\n const rowsCount = gridMap.length\n const columnsCount = gridMap[0].length\n let row = gridNode.getFirstChild()\n\n if(!$isTableRowNode(row)){\n throw new Error(\"Expected TableNode first child to be a RowNode\")\n }\n\n const unmerged:any[] = []\n for (let i = 0; i < rowsCount; i++) {\n if (i !== 0) {\n\n row = row.getNextSibling()\n\n if(!$isTableRowNode(row)){\n throw new Error(\"Expected TableNode first child to be a RowNode\")\n }\n \n }\n let lastRowCell: null | TableCellNode = null\n for (let j = 0; j < columnsCount; j++) {\n const cellMap = gridMap[i][j]\n const cell = cellMap.cell\n if (cellMap.startRow === i && cellMap.startColumn === j) {\n lastRowCell = cell\n unmerged.push(cell)\n }\n else if (cell.getColSpan() > 1 || cell.getRowSpan() > 1) {\n\n if(!$isTableCellNode(cell)){\n throw new Error(\"Expected TableNode cell to be a TableCellNode\")\n }\n \n const newCell = $createTableCellNode(cell.__headerState)\n if (lastRowCell !== null)\n lastRowCell.insertAfter(newCell)\n else\n $insertFirst(row, newCell)\n }\n }\n }\n for (const cell of unmerged) {\n cell.setColSpan(1)\n cell.setRowSpan(1)\n }\n }\n })\n })\n\n useEffect(() => {\n return editor.registerNodeTransform(TableCellNode, (node) => {\n if (node.getBackgroundColor() !== null)\n node.setBackgroundColor(null)\n })\n })\n\n const tableSelections = new Map<NodeKey, TableObserver>()\n\n const initializeTableNode = (tableNode: TableNode) => {\n\n const nodeKey = tableNode.getKey()\n\n const tableElement = editor.getElementByKey(\n nodeKey,\n ) as HTMLTableElementWithWithTableSelectionState\n\n if (tableElement && !tableSelections.has(nodeKey)) {\n tableSelections.set(nodeKey, applyTableHandlers(tableNode, tableElement,editor,true))\n }\n }\n \n // Plugins might be loaded _after_ initial content is set, hence existing table nodes\n // won't be initialized from mutation[create] listener. Instead doing it here,\n editor.getEditorState().read(() => {\n const tableNodes = $nodesOfType(TableNode)\n for (const tableNode of tableNodes) {\n if ($isTableNode(tableNode))\n initializeTableNode(tableNode)\n }\n })\n \n const unregisterMutationListener = editor.registerMutationListener(\n TableNode,\n (nodeMutations) => {\n for (const [nodeKey, mutation] of nodeMutations) {\n if (mutation === 'created') {\n editor.getEditorState().read(() => {\n const tableNode = $getNodeByKey<TableNode>(nodeKey)\n if ($isTableNode(tableNode))\n initializeTableNode(tableNode)\n })\n }\n else if (mutation === 'destroyed') {\n const tableSelection = tableSelections.get(nodeKey)\n \n if (tableSelection !== undefined) {\n tableSelection.removeListeners()\n tableSelections.delete(nodeKey)\n }\n }\n }\n },\n )\n \n // 注册事件\n return mergeRegister(\n editor.registerCommand<InsertTableCommandPayload>(INSERT_TABLE_COMMAND,({ columns, rows, includeHeaders }) => {\n\n const tableNode = $createTableNodeWithDimensions(\n Number(rows),\n Number(columns),\n includeHeaders,\n );\n\n $insertNodeToNearestRoot(tableNode)\n \n const firstDescendant = tableNode.getFirstDescendant();\n\n if ($isTextNode(firstDescendant)){ firstDescendant.select() }\n \n return true\n },COMMAND_PRIORITY_EDITOR),\n () => {\n unregisterMutationListener()\n // Hook might be called multiple times so cleaning up tables listeners as well,\n // as it'll be reinitialized during recurring call\n for (const [, tableSelection] of tableSelections)\n tableSelection.removeListeners()\n }\n );\n }\n})\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type { EditorThemeClasses } from 'lexical'\n\nconst theme: EditorThemeClasses = {\n blockCursor: 'mk-doc__blockCursor',\n characterLimit: 'mk-doc__characterLimit',\n code: 'mk-doc__code',\n codeHighlight: {\n 'atrule': 'mk-doc__tokenAttr',\n 'attr': 'mk-doc__tokenAttr',\n 'boolean': 'mk-doc__tokenProperty',\n 'builtin': 'mk-doc__tokenSelector',\n 'cdata': 'mk-doc__tokenComment',\n 'char': 'mk-doc__tokenSelector',\n 'class': 'mk-doc__tokenFunction',\n 'class-name': 'mk-doc__tokenFunction',\n 'comment': 'mk-doc__tokenComment',\n 'constant': 'mk-doc__tokenProperty',\n 'deleted': 'mk-doc__tokenProperty',\n 'doctype': 'mk-doc__tokenComment',\n 'entity': 'mk-doc__tokenOperator',\n 'function': 'mk-doc__tokenFunction',\n 'important': 'mk-doc__tokenVariable',\n 'inserted': 'mk-doc__tokenSelector',\n 'keyword': 'mk-doc__tokenAttr',\n 'namespace': 'mk-doc__tokenVariable',\n 'number': 'mk-doc__tokenProperty',\n 'operator': 'mk-doc__tokenOperator',\n 'prolog': 'mk-doc__tokenComment',\n 'property': 'mk-doc__tokenProperty',\n 'punctuation': 'mk-doc__tokenPunctuation',\n 'regex': 'mk-doc__tokenVariable',\n 'selector': 'mk-doc__tokenSelector',\n 'string': 'mk-doc__tokenSelector',\n 'symbol': 'mk-doc__tokenProperty',\n 'tag': 'mk-doc__tokenProperty',\n 'url': 'mk-doc__tokenOperator',\n 'variable': 'mk-doc__tokenVariable',\n },\n embedBlock: {\n base: 'mk-doc__embedBlock',\n focus: 'mk-doc__node-selection',\n },\n hashtag: 'mk-doc__hashtag',\n heading: {\n h1: 'mk-doc__h1',\n h2: 'mk-doc__h2',\n h3: 'mk-doc__h3',\n h4: 'mk-doc__h4',\n h5: 'mk-doc__h5',\n h6: 'mk-doc__h6',\n },\n image: 'mk-doc__img',\n indent: 'mk-doc__indent',\n layoutContainer: 'mk-doc__layoutContainer',\n layoutItem: 'mk-doc__layoutItem',\n link: 'mk-doc__link',\n list: {\n checklist: 'mk-doc__checklist',\n listitem: 'mk-doc__listItem',\n listitemChecked: 'mk-doc__listItemChecked',\n listitemUnchecked: 'mk-doc__listItemUnchecked',\n nested: {\n listitem: 'mk-doc__nestedListItem',\n },\n olDepth: [\n 'mk-doc__ol1',\n 'mk-doc__ol2',\n 'mk-doc__ol3',\n 'mk-doc__ol4',\n 'mk-doc__ol5',\n ],\n ul: 'mk-doc__ul',\n },\n ltr: 'mk-doc__ltr',\n mark: 'mk-doc__mark',\n markOverlap: 'mk-doc__markOverlap',\n paragraph: 'mk-doc__paragraph',\n quote: 'mk-doc__quote',\n rtl: 'mk-doc__rtl',\n table: 'mk-doc__table',\n tableAddColumns: 'mk-doc__tableAddColumns',\n tableAddRows: 'mk-doc__tableAddRows',\n tableCell: 'mk-doc__tableCell',\n tableCellActionButton: 'mk-doc__tableCellActionButton',\n tableCellActionButtonContainer:\n 'mk-doc__tableCellActionButtonContainer',\n tableCellEditing: 'mk-doc__tableCellEditing',\n tableCellHeader: 'mk-doc__tableCellHeader',\n tableCellPrimarySelected: 'mk-doc__tableCellPrimarySelected',\n tableCellResizer: 'mk-doc__tableCellResizer',\n tableCellSelected: 'mk-doc__tableCellSelected',\n tableCellSortedIndicator: 'mk-doc__tableCellSortedIndicator',\n tableResizeRuler: 'mk-doc__tableCellResizeRuler',\n tableSelected: 'mk-doc__tableSelected',\n tableSelection: 'mk-doc__tableSelection',\n text: {\n bold: 'mk-doc__textBold',\n code: 'mk-doc__textCode',\n italic: 'mk-doc__textItalic',\n strikethrough: 'mk-doc__textStrikethrough',\n subscript: 'mk-doc__textSubscript',\n superscript: 'mk-doc__textSuperscript',\n underline: 'mk-doc__textUnderline',\n underlineStrikethrough: 'mk-doc__textUnderlineStrikethrough',\n }\n}\n\nexport default theme\n","<script setup lang=\"ts\">\nimport { CAN_UNDO_COMMAND } from 'lexical'\nimport { mergeRegister } from '@lexical/utils'\nimport { useLexicalEditor,useMounted } from './composables'\nimport { \n LexicalAutoFocusPlugin,\n LexicalHistoryPlugin,\n TabIndentationPlugin,\n} from './plugins'\nimport './plugins/RichTextEditorPlugin'\nimport './plugins/HashtagPlugin'\nimport './plugins/ListPlugin'\nimport './plugins/CheckListPlugin'\nimport './plugins/TablePlugin'\nimport DocTheme from \"./DocTheme\"\nimport { generateHtmlFromNodes } from \"./utils\"\nimport { watchEffect } from \"vue\"\n\nconst props = defineProps({ \n modelValue:{ type:String,default:\"\" },\n htmlConfig:{ type:Object,default(){ return undefined; }},\n namespace: { type:String,default:\"\" },\n editable: { default:true,type:Boolean },\n importCss: { type:String,default:\"\" },\n importScripts: { type:String,default:\"\" },\n modules: { type:Array,default:()=>[] },\n templates: { type:Array,default:()=>[] }\n})\n\nconst emit = defineEmits<{\n (e: 'error', error: Error): void,\n (e: 'update:modelValue',value:string ): void\n}>()\n\nconst { editor,setEditorInitializeContent } = useLexicalEditor({\n html: props.htmlConfig,\n theme: DocTheme,\n editable:props.editable,\n namespace:props.namespace,\n editorState:null,\n importCss:props.importCss,\n importScripts:props.importScripts,\n modules:props.modules,\n templates:props.templates\n} as any,(error) => emit('error', error))\n// 设置内容\nconst setContent = (content?:string)=>setEditorInitializeContent(content)\n\n// 数据更新\nlet inited = false;\nlet triggerCanUndo = false\nconst unWatch = watchEffect(() => {\n if(props.modelValue && !inited){\n // 初始化编辑器\n setEditorInitializeContent(props.modelValue)\n inited = true;\n setTimeout(()=>unWatch(),1);\n }\n})\n\nuseMounted(()=>{\n \n return mergeRegister(\n editor.registerCommand(CAN_UNDO_COMMAND, (payload: boolean) => {\n if(!triggerCanUndo){\n emit(\"update:modelValue\",generateHtmlFromNodes(editor));\n triggerCanUndo = payload;\n }\n return true\n }, 1),\n editor.registerUpdateListener(({ editorState }) => {\n if(triggerCanUndo){\n editorState.read(() => emit(\"update:modelValue\",generateHtmlFromNodes(editor)))\n }\n })\n )\n})\n\ndefineExpose({ setContent });\n</script>\n\n<template>\n <slot></slot>\n <LexicalAutoFocusPlugin />\n <LexicalHistoryPlugin />\n <TabIndentationPlugin />\n</template>\n<style lang=\"scss\">\n.mk-doc-editor{\n &__module-template{\n &_dialog{\n &_warp{\n height:600px;\n display: flex;\n flex-direction: column;\n }\n &_list-body{\n flex: 1;\n height: 100%;\n overflow: auto;\n padding-top: 10px;\n box-sizing: border-box;\n display: flex;\n flex-wrap: wrap; \n align-content: flex-start;\n gap: 10px;\n }\n &_list-item{\n width: 49%;\n height: 150px;\n display: flex;\n background-color: #dedede;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n border: 2px solid #dedede; \n\n &.active{\n border-color:#2196F3;\n }\n &_title{\n text-align:center;\n }\n &.cover{\n img{\n object-fit: contain;\n padding: 10px;\n width: 100%;\n height: 100%; \n box-sizing: border-box;\n }\n >.mk-doc-editor__module-template_dialog_list-item_title{\n width: 100%;\n height: 100%;\n display: none;\n background-color: #0d0d0db3;\n align-items: center;\n justify-content: center;\n color:#fff;\n position: absolute;\n top:0;\n left:0;\n }\n &:hover{\n >.mk-doc-editor__module-template_dialog_list-item_title{\n display: flex;\n }\n }\n }\n }\n }\n }\n}\n</style>\n","import { type LexicalEditor } from 'lexical'\nimport { readonly, ref } from 'vue'\nimport { $canShowPlaceholderCurry } from '@lexical/text'\nimport { mergeRegister } from '@lexical/utils'\nimport { useMounted } from '../composables'\n\n\n\nfunction canShowPlaceholderFromCurrentEditorState(\n editor: LexicalEditor,\n): boolean {\n const currentCanShowPlaceholder = editor\n .getEditorState()\n .read($canShowPlaceholderCurry(editor.isComposing()))\n\n return currentCanShowPlaceholder\n}\n\nexport function useCanShowPlaceholder(editor: LexicalEditor) {\n const initialState = editor\n .getEditorState()\n .read($canShowPlaceholderCurry(editor.isComposing()))\n\n const canShowPlaceholder = ref(initialState)\n\n function resetCanShowPlaceholder() {\n const currentCanShowPlaceholder\n = canShowPlaceholderFromCurrentEditorState(editor)\n canShowPlaceholder.value = currentCanShowPlaceholder\n }\n\n useMounted(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n resetCanShowPlaceholder()\n }),\n editor.registerEditableListener(() => {\n resetCanShowPlaceholder()\n }),\n )\n })\n\n return readonly(canShowPlaceholder)\n}\n","<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useLexicalEditorContext,useMounted } from '../composables'\n\nwithDefaults(defineProps<{\n ariaActivedescendant?: string\n ariaAutocomplete?: 'none' | 'inline' | 'list' | 'both'\n ariaControls?: string\n ariaDescribedby?: string\n ariaExpanded?: boolean\n ariaLabel?: string\n ariaLabelledby?: string\n ariaMultiline?: boolean\n ariaOwns?: string\n ariaRequired?: boolean\n autoCapitalize?: boolean\n autoComplete?: boolean\n autoCorrect?: boolean\n id?: string\n editable?: boolean\n role?: string\n spellcheck?: boolean\n tabindex?: number\n enableGrammarly?: boolean\n}>(), {\n role: 'textbox',\n spellcheck: true,\n})\nconst root = ref<HTMLElement | null>(null)\nconst { editor } = useLexicalEditorContext()\n\nconst editable = ref(false)\n\nuseMounted(() => {\n\n if (root.value) {\n editor.setRootElement(root.value as HTMLElement)\n editable.value = editor.isEditable()\n }\n return editor.registerEditableListener((currentIsEditable) => {\n editable.value = currentIsEditable\n })\n})\n</script>\n\n<template>\n <div\n :id=\"id\"\n ref=\"root\" \n :aria-activedescendant=\"!editable ? undefined : ariaActivedescendant\"\n :aria-autocomplete=\"!editable ? undefined : ariaAutocomplete\"\n :aria-controls=\"!editable ? undefined : ariaControls\"\n :aria-describedby=\"ariaDescribedby\"\n :aria-expanded=\"!editable ? undefined : role === 'combobox' ? !!ariaExpanded ? ariaExpanded : undefined : undefined\"\n :aria-label=\"ariaLabel\"\n :aria-labelledby=\"ariaLabelledby\"\n :aria-multiline=\"ariaMultiline\"\n :aria-owns=\"!editable ? undefined : ariaOwns\"\n :aria-required=\"ariaRequired\"\n :autocapitalize=\"`${autoCapitalize}`\"\n :autocomplete=\"autoComplete\"\n :autocorrect=\"`${autoCorrect}`\"\n :contenteditable=\"editable\"\n :role=\"!editable ? undefined : role\"\n :spellcheck=\"spellcheck\"\n :tabindex=\"tabindex\">\n </div>\n</template>\n","import { computed, DefineComponent, defineComponent, h, shallowRef, Teleport, unref } from 'vue'\nimport { useLexicalEditorContext, useMounted } from '../composables'\n\nexport default defineComponent({\n name: 'LexicalDecoratedTeleports',\n setup() {\n const { editor } = useLexicalEditorContext()\n\n const decorators = shallowRef<Record<string, DefineComponent>>(editor.getDecorators())\n\n useMounted(() => {\n return editor.registerDecoratorListener((nextDecorators) => {\n decorators.value = nextDecorators as Record<string, DefineComponent>\n })\n })\n\n // Return decorators defined as Vue Teleports\n const outDecorators = computed(() => {\n const decoratedTeleports = []\n const decoratorKeys = Object.keys(unref(decorators))\n for (let i = 0; i < decoratorKeys.length; i++) {\n const nodeKey = decoratorKeys[i]\n const vueDecorator = decorators.value[nodeKey]\n const element = editor.getElementByKey(nodeKey)\n if (element !== null) {\n decoratedTeleports.push( h(Teleport, { to: element, }, vueDecorator))\n }\n }\n\n return decoratedTeleports\n })\n\n return () => outDecorators.value\n }\n})\n","export default \"html,body{\\n width:100%;\\n height:100%;\\n padding:0px;\\n margin:0px;\\n position: relative;\\n font-size: 14px;\\n color:#000;\\n overflow: hidden;\\n}\\n.mk-doc-editor-newline{\\n width: 100%;\\n line-height: 40px;\\n display: flex;\\n cursor: pointer;\\n align-items: center;\\n justify-content: center;\\n color: #ccc;\\n position: absolute;\\n bottom: 0;\\n z-index: 10;\\n}\\n.mk-doc-editor-newline:hover{\\n outline: 1px dashed #ccc;\\n}\\n.mk-doc-editor-stage{\\n width: 100%;\\n margin: auto;\\n position: relative;\\n z-index: 1;\\n outline: 0;\\n border: 0;\\n padding: 10px 20px 30px 20px;\\n box-sizing: border-box;\\n flex: 1; \\n}\\n\\n.mk-doc-editor__stage__placeholder{\\n position: absolute;\\n top: 10px;\\n left:20px;\\n z-index: 0; \\n color: #ccc;\\n padding-left: 4px;\\n}\\n\"","export default \" \\n.mk-doc__embedBlock {\\n position: relative;\\n z-index: 1;\\n padding: 1px;\\n cursor: pointer;\\n}\\n\\n.mk-doc__embedBlock >*{ pointer-events: none; }\\n\\n/* 清除浮动 */\\n.mk-doc-editor-stage::after{\\n content: \\\"\\\";\\n display: block;\\n clear: both;\\n width: 0;\\n height: 0;\\n font-size: 0;\\n}\\n/* 缩进 */\\n.mk-doc-editor-stage * {\\n --lexical-indent-base-value:2em\\n}\\n/* 光标样式 */\\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\\n.mk-doc__empty-mark::before,\\n.mk-doc__br-brfore-mark::after{ \\n content: \\\"↩︎\\\";\\n color: #ccc;\\n margin-left: 4px;\\n cursor: text;\\n user-select: none;\\n pointer-events: none;\\n position: absolute;\\n font-size: 12px;\\n height: 0;\\n width: 1px; \\n vertical-align: middle;\\n}\\n\\n/* placeholder 模式 */\\n.mk-doc-editor-stage.placeholder *::after,\\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\\n\\n/* 选中样式 */\\n.mk-doc__node-selection {\\n outline: 2px solid rgb(60, 132, 244);\\n}\\n/* hover 的标识线条 */\\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\\n outline: 1px solid #d7e6ff;\\n}\\n.mk-doc__image-text-warp p:hover,\\n.mk-doc__image-text-warp section:hover,\\n.mk-doc__image-text-warp div:hover,\\n[data-lexical-decorator]:hover {\\n outline: none !important;\\n}\\n.mk-doc-editor-stage [data-lexical-decorator]{\\n user-select: none;\\n white-space: initial;\\n word-break: initial;\\n cursor: pointer;\\n}\\n.mk-doc-editor-stage [data-lexical-decorator]>* {\\n pointer-events: none;\\n}\\n\"","<script setup lang=\"ts\">\n\nimport { computed, ref } from \"vue\"\nimport { useLexicalEditorContext,useMounted } from '../composables'\nimport { useCanShowPlaceholder } from \"./composables\" \nimport { $createParagraphNode, $getRoot, $isElementNode,$isParagraphNode } from 'lexical'\nimport { mergeRegister } from '@lexical/utils'\nimport { registerDragonSupport } from '@lexical/dragon'\nimport { registerRichText } from '@lexical/rich-text'\nimport { registerPlainText } from '@lexical/plain-text'\nimport ContentEditable from \"./ContentEditable.vue\"\nimport DecoratedTeleports from \"./DecoratedTeleports\"\nimport DocEditorStageCss from \"../assets/doc-editor-stage.css?raw\"\nimport DocEditorCss from \"../assets/doc-editor.css?raw\"\n\n// 参数\nconst props = defineProps({ placeholder:{ type:String,default:`在这里输入正文...` },type:{ type:String,default:`richtext` } })\n\nconst { editor,templates,modules,importCss,importScript,importStyles,stageId } = useLexicalEditorContext()\n\nconst canShowPlaceholder = useCanShowPlaceholder(editor)\n\n// 空内容\nconst contentIsEmpty = ref(true)\n// 显示新增新行\nconst showAddNewline = ref(false)\n// iframe 编辑器\nconst iframeContentRef = ref(null as any);\nconst iframeBody = computed(()=>iframeContentRef.value?.contentWindow?.document?.body)\n\nlet updateTimeoutKey:any = 0;\n// 更新舞台高度\nconst updateStageHeight = ()=>{\n const stageEl = editor.getRootElement() as HTMLElement;\n updateTimeoutKey = setTimeout(() => {\n if(stageEl){ iframeContentRef.value.style.height = (stageEl.offsetHeight + 40)+\"px\"; }\n updateStageHeight();\n }, 20);\n return ()=>{\n clearTimeout(updateTimeoutKey);\n }\n}\n\n// 添加新行\nconst addNewline = ()=>{\n editor.update(()=>$getRoot().append($createParagraphNode()))\n}\n\nuseMounted(()=>{\n\n const doc = iframeContentRef.value?.contentWindow?.document;\n \n // 扩展的js和css\n importScript.split(\",\").filter(item=>!!item).forEach(path=>{\n const script = document.createElement(\"script\");\n script.src = path;\n script.setAttribute(\"crossorigin\",\"true\")\n doc.head.append(script);\n })\n\n importCss.split(\",\").filter(item=>!!item).forEach(path=>{\n const link = document.createElement(\"link\");\n link.href = path;\n link.setAttribute(\"rel\",\"stylesheet\")\n link.setAttribute(\"crossorigin\",\"true\")\n doc.head.append(link);\n })\n\n // 样式\n const style = document.createElement(\"style\");\n style.setAttribute(\"type\",\"text/css\")\n\n // 编辑器 默认样式\n style.innerHTML = [DocEditorStageCss,DocEditorCss,importStyles].join(\"\\r\\n\");\n\n //模块渲染样式\n style.innerHTML += modules.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\n\n //模版渲染样式\n style.innerHTML += templates.filter(item=>item.editorCss).map(item=>item.editorCss).join(\"\\r\\n\");\n\n doc.head.append(style);\n\n return mergeRegister(\n // 注册富文本 \n props.type == \"richtext\" ? registerRichText(editor) : registerPlainText(editor),\n registerDragonSupport(editor),\n updateStageHeight(),\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n\n const root = $getRoot();\n const lastNode = root.getLastChild();\n\n if(root.getChildrenSize() == 1){\n if($isElementNode(lastNode)){\n contentIsEmpty.value = lastNode.isEmpty();\n }\n }\n else{\n contentIsEmpty.value = editorState.isEmpty();\n }\n\n showAddNewline.value = !$isParagraphNode(lastNode)\n\n })\n })\n )\n})\n\n</script>\n\n<template>\n <iframe v-bind=\"$attrs\" :id=\"stageId\" class=\"mk-doc-editor-stage-iframe\" ref=\"iframeContentRef\"></iframe>\n <Teleport v-if=\"iframeBody\" :to=\"iframeBody\">\n <ContentEditable class=\"mk-doc-editor-stage\" :class=\"{placeholder:canShowPlaceholder && contentIsEmpty}\" />\n <div @click=\"addNewline()\" v-if=\"showAddNewline\" class=\"mk-doc-editor-newline\">添加新行</div>\n <template v-if=\"canShowPlaceholder && contentIsEmpty\">\n <p class=\"mk-doc__paragraph mk-doc-editor__stage__placeholder\" style=\"user-select: text;white-space: pre-wrap;word-break: break-word;\">\n {{placeholder}}\n </p>\n </template>\n <DecoratedTeleports />\n <slot></slot>\n </Teleport>\n</template>\n<style scoped>\n.mk-doc-editor-stage-iframe{\n width: 100%;\n min-height: 100%;\n z-index: 0;\n position: relative;\n overflow: hidden;\n background-color: #fff; \n margin: 0;\n border: 0;\n}\n</style>\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const markdownEditorProps = buildProps({\n modelValue: {\n type: String,\n required: true,\n },\n} as const);\n\nexport type MarkdownEditorProps = ExtractPropTypes<typeof markdownEditorProps>;\n\nexport const markdownEditorEmits = {\n \"update:model-value\": (modelValue: string) => true,\n};\n\nexport type MarkdownEditorEmits = typeof markdownEditorEmits;\n","import { defineAsyncComponent } from \"vue\";\nimport { withInstall } from \"@maketribe/utils\";\n\nconst _MarkdownEditor = defineAsyncComponent(() => import(\"./Editor\"));\n\nexport const MKMarkdownEditor = withInstall(_MarkdownEditor);\n\nexport default MKMarkdownEditor;\n\nexport * from \"./options\";\n","<template>\n <LexicalComposer v-model=\"docContent\" :importCss=\"css\" :importScripts=\"js\" :namespace=\"namespace\">\n <div class=\"mk-rich-text-editor\" v-bind=\"$attrs\" v-loading=\"loading\">\n <div class=\"mk-rich-text-toolbar\">\n <ToolbarPlugin mode=\"rich-text\" />\n </div>\n <div class=\"mk-rich-text-editor__stage_warp\">\n <EditorStage class=\"mk-rich-text-editor__stage_iframe\" />\n <ElementBlockSelectionPlugin />\n </div>\n <NodeTreeViewPlugin class=\"bg-[#f4f4f4]\" />\n </div>\n </LexicalComposer>\n</template>\n\n<script setup lang=\"ts\">\nimport { \n LexicalComposer,EditorStage,NodeTreeViewPlugin,\n ElementBlockSelectionPlugin,ToolbarPlugin\n} from '../LexicalEditor'\nimport { computed } from \"vue\"\ndefineOptions({ name:\"MKRichTextEditor\"})\nconst props = defineProps({ \n modelValue:{ type:String,default:\"\"},\n editable: { default:true,type:Boolean },\n namespace: { type:String,default:\"rich-text-editor\" },\n placeholder:{type:String,default:\"这里输入正文...\"},\n loading:{ type:Boolean,default:false},\n js:{ type:String,default:`` },\n css:{ type:String,default:`` }\n})\n\nconst emit = defineEmits<{\n (e: 'error', error: Error): void,\n (e: 'update:modelValue',value:string ): void\n}>()\n\n// 文档内容\nconst docContent = computed({\n get:()=>props.modelValue,\n set:v=>emit('update:modelValue',v)\n})\n\n</script>\n<style scoped lang=\"scss\">\n\n.mk-rich-text-editor{\n width: 100%;\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--el-input-border-color, var(--el-border-color));\n\n .mk-rich-text-toolbar{\n background-color: #fff;\n padding: 5px 20px;\n z-index: 1;\n text-align: center;\n border-bottom: 1px solid var(--el-input-border-color, var(--el-border-color));\n }\n\n &__stage_warp{\n width: 100%;\n z-index: 0;\n position: relative;\n height: calc(100% - 45px);\n padding: 10px;\n overflow: auto;\n box-sizing: border-box;\n }\n\n &__view_warp{\n display: flex;\n background-color: var(--mk-container-border-color);\n overflow: auto; \n height: calc(100vh - 50px);\n padding-top: 10px;\n }\n\n &__module-template{\n &_dialog{\n &_warp{\n height:600px;\n display: flex;\n flex-direction: column;\n }\n &_list-body{\n flex: 1;\n height: 100%;\n overflow: auto;\n padding-top: 10px;\n box-sizing: border-box;\n display: flex;\n flex-wrap: wrap; \n align-content: flex-start;\n gap: 10px;\n }\n &_list-item{\n width: 49%;\n height: 150px;\n display: flex;\n background-color: #dedede;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n box-sizing: border-box;\n position: relative;\n border: 2px solid #dedede; \n\n &.active{\n border-color:#2196F3;\n }\n &_title{\n text-align:center;\n }\n &.cover{\n img{\n object-fit: contain;\n padding: 10px;\n width: 100%;\n height: 100%; \n box-sizing: border-box;\n }\n >.mk-doc-editor__module-template_dialog_list-item_title{\n width: 100%;\n height: 100%;\n display: none;\n background-color: #0d0d0db3;\n align-items: center;\n justify-content: center;\n color:#fff;\n position: absolute;\n top:0;\n left:0;\n }\n &:hover{\n >.mk-doc-editor__module-template_dialog_list-item_title{\n display: flex;\n }\n }\n }\n }\n }\n }\n}\n\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport RichTextEditor from \"./index.vue\";\n\nexport const MKRichTextEditor = withInstall(RichTextEditor);\n\nexport default MKRichTextEditor;\n\n","import {Fragment, Ref, defineComponent, ref, unref} from \"vue\";\nimport {DialogInstance, Dialoger} from \"@maketribe/dm\";\nimport {DialogerImpl} from \"../../../core/message\";\nimport ConfigProvider from \"../ConfigProvider\"\nimport {isFunction} from \"lodash-es\";\nimport {ElButton, ElDialog} from \"element-plus\";\n\nexport default defineComponent({\n name: \"MKDialogs\",\n setup(props) {\n const dialogInstances: Ref<DialogInstance[]> = ref([]);\n\n const dialogImplInstance = Dialoger.implInstance as DialogerImpl | null;\n\n if (\n dialogImplInstance?.dialogInstanceCreateEvent &&\n isFunction(dialogImplInstance.dialogInstanceCreateEvent.on)\n ) {\n dialogImplInstance.dialogInstanceCreateEvent.on((dialogInstance) => {\n dialogInstance.destroyEvent.once(() => {\n const index = dialogInstances.value.findIndex(\n (instance) => dialogInstance.id === instance.id\n );\n\n if (index === -1) {\n return;\n }\n\n dialogInstances.value.splice(index, 1);\n });\n\n dialogInstances.value.push(dialogInstance);\n });\n }\n\n const handleClose = async (dialogInstance: DialogInstance) => {\n if (\n isFunction(dialogInstance.onClose)\n ? (await dialogInstance.onClose()) === false\n : false\n ) {\n return;\n }\n\n dialogInstance.visible = false;\n };\n\n const handleCancel = async (dialogInstance: DialogInstance) => {\n if (\n isFunction(dialogInstance.onCancel)\n ? (await dialogInstance.onCancel()) === false\n : false\n ) {\n return;\n }\n\n dialogInstance.visible = false;\n };\n\n const handleConfirm = async (dialogInstance: DialogInstance) => {\n if (\n isFunction(dialogInstance.onConfirm)\n ? (await dialogInstance.onConfirm()) === false\n : false\n ) {\n return;\n }\n\n dialogInstance.visible = false;\n };\n\n return () => {\n\n const dialogs = unref(dialogInstances).map((dialogInstance) => {\n return (\n <ConfigProvider>\n <ElDialog\n class={dialogInstance.class}\n width={dialogInstance.width}\n modelValue={dialogInstance.visible}\n onUpdate:model-value={(visible: boolean) =>\n (dialogInstance.visible = visible)\n }\n onClose={() => handleClose(dialogInstance)}\n title={isFunction(dialogInstance.header)\n ? dialogInstance.header?.()\n : dialogInstance.title || \"\"}\n v-slots={{\n default: () => dialogInstance.body(),\n footer: () =>\n isFunction(dialogInstance.footer) ? (\n dialogInstance.footer?.()\n ) : (\n <Fragment>\n <ElButton onClick={() => handleCancel(dialogInstance)}>\n {dialogInstance.cancelButtonText ?? \"取消\"}\n </ElButton>\n <ElButton\n type=\"primary\"\n onClick={() => handleConfirm(dialogInstance)}\n >\n {dialogInstance.confirmButtonText ?? \"确认\"}\n </ElButton>\n </Fragment>\n ),\n }}\n />\n </ConfigProvider>\n );\n });\n\n // const dialogs = unref(dialogInstances).map((dialogInstance) => {\n // return (\n // <ElDialog\n // class={dialogInstance.class}\n // modelValue={dialogInstance.visible}\n // onUpdate:modelValue={(visible: boolean) =>\n // (dialogInstance.visible = visible)\n // }\n // appendToBody\n // destroyOnClose={true}\n // width={dialogInstance.width}\n // onClose={() => handleClose(dialogInstance)}\n // v-slots={{\n // header: () =>\n // isFunction(dialogInstance.header)\n // ? dialogInstance.header?.()\n // : dialogInstance.title || \"\",\n // default: () => dialogInstance.body(),\n // footer: () =>\n // isFunction(dialogInstance.footer) ? (\n // dialogInstance.footer?.()\n // ) : (\n // <Fragment>\n // <ElButton onClick={() => handleCancel(dialogInstance)}>\n // {dialogInstance.cancelButtonText ?? \"取消\"}\n // </ElButton>\n // <ElButton\n // type=\"primary\"\n // onClick={() => handleConfirm(dialogInstance)}\n // >\n // {dialogInstance.confirmButtonText ?? \"确认\"}\n // </ElButton>\n // </Fragment>\n // ),\n // }}\n // />\n // );\n // });\n\n return <Fragment>{dialogs}</Fragment>;\n };\n },\n});\n","import Dialogs from \"./dialogs.tsx\";\n\nexport const MKDialogs = Dialogs;\n\nexport default MKDialogs;\n","import { buildProps } from \"@maketribe/utils\";\nimport { ExtractPropTypes } from \"vue\";\n\nexport const textProps = buildProps({\n text: { type: String, required: false },\n copyContent: { type: String, required: false },\n copy: { type: Boolean, required: false },\n});\n\nexport type TextProps = ExtractPropTypes<typeof textProps>;\n","import {defineComponent, ref, renderSlot} from \"vue\";\nimport {ElTooltip} from \"element-plus\";\nimport { textProps } from \"./options\";\nimport {Messager} from \"@maketribe/dm\";\nimport {MKSvgIcon} from \"../SvgIcon\";\n\nexport default defineComponent({\n name: \"MKText\",\n props: textProps,\n setup(props, { slots }) {\n const copyContainer = ref<HTMLElement>();\n const copyHandle = () => {\n const copyText = props.copyContent || copyContainer.value?.innerText || \"\";\n //兼容性判断\n if (navigator.clipboard === undefined) {\n //通过input标签进行复制\n const input = document.createElement(\"input\");\n input.value = copyText;\n document.body.appendChild(input);\n input.select();\n document.execCommand(\"Copy\");\n document.body.removeChild(input);\n }\n else {\n navigator.clipboard.writeText(copyText);\n }\n Messager.success({message: \"复制成功\"});\n };\n\n return () => {\n return (\n <span class=\"flex-inline items-center justify-center\" ref={((el: any) => (copyContainer.value = el)) as any}>\n {renderSlot(slots, \"default\") ?? props.text}\n {\n props.copy ? <ElTooltip content={\"点击复制\"} placement=\"top\"><MKSvgIcon name=\"ep:copy-document\" class=\"mx-2\" size={14} style={{ cursor: \"pointer\"}} onClick={copyHandle} /></ElTooltip> : null\n }\n </span>\n );\n };\n },\n // setup(props) {\n // const isShowTooltip = ref(false);\n //\n // const handleMouseenter = (event: MouseEvent) => {\n // const target = event.target as HTMLElement;\n // isShowTooltip.value = target.scrollWidth > target.clientWidth;\n // };\n //\n // return () => {\n // return (\n // <ElTooltip disabled={unref(isShowTooltip)} v-slots={{ content: () => props.text }}>\n // <div>{props.text}</div>\n // </ElTooltip>\n // );\n // };\n // },\n});\n","import Text from \"./Text\";\n\nexport const MKText = Text;\nexport default MKText;\nexport * from \"./options\";\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\n\nexport const verifyDialogProps = buildProps({\n scene: {\n type: String,\n required: true,\n },\n width: {\n type: String,\n default: \"300px\",\n },\n} as const);\n\nexport const verifyDialogEmits = {\n \"update:visible\": (modelValue: any) => true,\n\n confirm: (modelValue: any) => true,\n};\nexport type VerifyDialogProps = ExtractPropTypes<typeof verifyDialogEmits>;\n","import {\n computed,\n defineComponent,\n unref,\n ref,\n onMounted,\n Ref,\n Fragment,\n} from \"vue\";\nimport { verifyDialogProps, verifyDialogEmits } from \"./option\";\nimport { Disposable, createDisposable } from \"@maketribe/utils\";\nimport { useHttpRequest } from \"../../../composables\";\n\n\nexport default defineComponent({\n name: \"VerifyPanel\",\n props: verifyDialogProps,\n emits: verifyDialogEmits,\n setup(props, { emit, expose }) {\n const wrapperEl: Ref<HTMLElement | null> = ref(null);\n const buttonEl: Ref<HTMLElement | null> = ref(null);\n const grandEl: Ref<HTMLElement | null> = ref(null);\n\n const httpRequest = useHttpRequest()!;\n // 样式默认宽度是48px\n let slideWidth: number = 48;\n\n const isError = ref(false);\n\n const deg = ref(0);\n const imageUrl = ref(\"\");\n const loading = ref(false);\n const imageStyle = computed(() => {\n return {\n backgroundImage: `url(${unref(imageUrl)})`,\n transform: `rotate(-${unref(deg)}deg)`,\n };\n });\n\n const loadImage = async (): Promise<undefined> => {\n loading.value = true;\n\n try {\n const response = await httpRequest.get<Blob>(\n \"/ms/app/captcha/rotation/image\",\n {\n params: {\n scene: props.scene,\n t: Math.random(),\n },\n responseType: \"blob\",\n }\n );\n\n if (!(response.data instanceof Blob)) {\n return;\n }\n\n imageUrl.value = URL.createObjectURL(response.data);\n } finally {\n loading.value = false;\n }\n\n };\n\n const handleSwitchConfirm = () => {\n emit(\"confirm\", unref(deg));\n };\n\n const handleMouseDown = (mouseDownEvent: MouseEvent | TouchEvent) => {\n if (unref(isError)) {\n return;\n }\n\n const startX =\n mouseDownEvent instanceof MouseEvent\n ? mouseDownEvent.clientX\n : mouseDownEvent.touches[0].clientX;\n const disposable = new Disposable();\n const totalWidth = unref(wrapperEl)!.getBoundingClientRect().width;\n\n const handleMouseMove = (event: MouseEvent | TouchEvent) => {\n const moveX =\n event instanceof MouseEvent\n ? event.clientX\n : event.touches[0].clientX;\n\n // 限定宽度范围\n slideWidth = Math.min(Math.max(moveX - startX + 48, 48), totalWidth);\n\n deg.value = Math.floor(((slideWidth - 48) / (totalWidth - 48)) * 360);\n\n unref(grandEl)!.style.width = `${slideWidth}px`;\n unref(buttonEl)!.style.transform = `translateX(${slideWidth - 48}px)`;\n };\n\n const handleMouseUp = (event: MouseEvent | TouchEvent) => {\n if (deg.value !== 0) {\n handleSwitchConfirm();\n }\n\n disposable.dispose();\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"touchmove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchend\", handleMouseUp);\n document.addEventListener(\"touchcancel\", handleMouseUp);\n\n disposable.register(\n createDisposable(() => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchend\", handleMouseUp);\n document.removeEventListener(\"touchcancel\", handleMouseUp);\n })\n );\n };\n\n const reset = () => {\n unref(grandEl)!.style.width = ``;\n unref(buttonEl)!.style.transform = ``;\n };\n\n expose({\n fail: () => {\n isError.value = true;\n\n setTimeout(() => {\n isError.value = false;\n\n reset();\n }, 1000);\n },\n });\n\n onMounted(async () => {\n await loadImage();\n });\n\n return () => {\n return (\n <Fragment>\n <div class=\"mk-verify-dialog__wrapper\" v-loading={unref(loading)}>\n <div\n class=\"mk-verify-dialog__image\"\n ref=\"imageEl\"\n style={imageStyle.value}\n />\n <div class=\"mk-verify-dialog__coordinate\" />\n </div>\n <div class={[\"mk-verify-switch\", unref(isError) ? \"is-error\" : \"\"]}>\n <div\n class=\"mk-verify-switch__wrapper\"\n ref={((el: HTMLDivElement) => (wrapperEl.value = el)) as any}\n >\n <div\n class=\"mk-verify-switch__button-grand\"\n ref={((el: HTMLDivElement) => (grandEl.value = el)) as any}\n />\n <div\n class=\"mk-verify-switch__button\"\n ref={((el: HTMLDivElement) => (buttonEl.value = el)) as any}\n onMousedown={handleMouseDown}\n onTouchstart={handleMouseDown}\n />\n </div>\n </div>\n </Fragment>\n );\n };\n },\n});\n","import {Dialoger} from \"@maketribe/dm\";\nimport VerifyPanel from \"./VerifyPanel\";\n\ntype VerifyCodeOptions = { scene: string, title: string, width: string }\n\nasync function OpenVerifyCode(options: VerifyCodeOptions): Promise<any> {\n return new Promise((resolve) => {\n\n const dialogInstance = Dialoger.customRender({\n width: options.width ?? \"300px\",\n title: options.title ?? \"图片验证\",\n class: \"mk-verify-dialog\",\n body: () => (\n <VerifyPanel scene={options.scene} onConfirm={\n result => {\n dialogInstance.destroy();\n resolve(result)\n }\n }></VerifyPanel>\n ),\n footer: () => \"\",\n onClose: () => {\n setTimeout(() => {\n dialogInstance.destroy();\n }, 100);\n },\n });\n });\n}\n\nexport default OpenVerifyCode;\n","import \"./index.scss\"\nimport OpenVerifyCode from \"./api\"\nexport const MKOpenVerifyCode = OpenVerifyCode;\nexport default MKOpenVerifyCode;\n","import { Disposable } from \"@maketribe/utils\";\nimport { MSAppClient } from \"../../../core\";\nimport { Dialoger, LoadingManager, Messager } from \"@maketribe/dm\";\nimport { R } from \"@maketribe/request\";\n\nexport type ResourceInfo = {\n name: string;\n path: string;\n isDirectory: boolean;\n extension: string;\n length: string;\n lastModified: string;\n isSelected: boolean;\n};\n\nexport type ResourceManagerOptions = {\n extensions?: string[];\n baseURL: string;\n};\n\nexport class ResourceManager extends Disposable {\n directories: string[];\n\n resourceInfoList: ResourceInfo[];\n\n loadingManager: LoadingManager;\n\n isShowEditDialog: boolean = false;\n\n currentEditText: string = \"\";\n\n filterExtensions: string[] = [];\n\n baseURL: string = \"\";\n\n get selectResourceList() {\n return this.resourceInfoList.filter((item) => item.isSelected);\n }\n\n get loading() {\n return this.loadingManager.loading;\n }\n\n constructor(options: ResourceManagerOptions) {\n super();\n\n this.directories = [];\n\n this.resourceInfoList = [];\n\n this.loadingManager = new LoadingManager();\n\n this.filterExtensions = options.extensions ?? [];\n this.baseURL = options.baseURL;\n }\n\n async loadResourceInfoList(toPath: string = this.directories.length ? `/${this.directories.join(\"/\")}` : \"\" ) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n const response = await httpRequest.post<R<ResourceInfo[]>>(\n `${this.baseURL}/list`,\n {\n directoryPath: toPath,\n extensions: this.filterExtensions,\n }\n );\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.resourceInfoList = [];\n return;\n }\n\n this.resourceInfoList = response.data.data.map((item) => ({\n ...item,\n isSelected: false,\n }));\n\n var directorySegments = toPath.startsWith(\"/\")\n ? toPath.slice(1).split(\"/\")\n : toPath.split(\"/\");\n\n this.directories = directorySegments.filter(Boolean);\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async deleteSelectResourceList() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n\n this.loadingManager.startLoading();\n\n const response = await httpRequest.post(`${this.baseURL}/delete`, {\n paths: this.selectResourceList.map((item) => item.path),\n });\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.loadResourceInfoList();\n return;\n }\n\n await this.loadResourceInfoList();\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n // 暂不做调整\n async getExistPathList(pathList: string[]) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n const directoryPath = this.directories.length\n ? `/${this.directories.join(\"/\")}`\n : \"\";\n\n return await httpRequest.post(`${this.baseURL}/exist-path-list`, {\n pathList,\n directoryPath,\n });\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n\n throw e;\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async uploadResourceList(files: File[]) {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var directory = this.directories.length\n ? `/${this.directories.join(\"/\")}`\n : \"\";\n\n var formData = new FormData();\n for (var i = 0; i < files.length; i++) {\n formData.append(files[i].name, files[i]);\n }\n formData.append(\"directory\", directory);\n\n const response = await httpRequest.post(`${this.baseURL}/save`, formData);\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n this.loadResourceInfoList();\n return;\n }\n\n await this.loadResourceInfoList();\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async downloadSelectResource() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n const response = await httpRequest.post<Blob>(\n `${this.baseURL}/download`,\n {\n path: this.selectResourceList[0].path,\n },\n { responseType: \"blob\" }\n );\n\n const url = URL.createObjectURL(response.data);\n\n var aElement = document.createElement(\"a\");\n aElement.href = url;\n aElement.target = \"_blank\";\n aElement.download = this.selectResourceList[0].name;\n\n aElement.click();\n\n URL.revokeObjectURL(url);\n } catch (e) {\n console.error(e);\n\n Messager.error({ message: \"网络异常\" });\n }\n }\n\n async editSelectFile() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var resourceInfo = this.selectResourceList[0];\n\n const response = await httpRequest.post(`${this.baseURL}/text/read`, {\n path: resourceInfo.path,\n });\n\n this.isShowEditDialog = true;\n this.currentEditText = response.data.data;\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n async saveEditFile() {\n const httpRequest = MSAppClient.instance!.httpRequest;\n\n try {\n this.loadingManager.startLoading();\n\n var resourceInfo = this.selectResourceList[0];\n\n const response = await httpRequest.post(`${this.baseURL}/text/write`, {\n path: resourceInfo.path,\n content: this.currentEditText,\n });\n\n if (response.data.code !== 200) {\n Messager.error({ message: response.data.msg });\n return;\n }\n\n await this.loadResourceInfoList();\n\n this.isShowEditDialog = false;\n this.currentEditText = \"\";\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n\n clearAllSelect() {\n for (const resourceInfo of this.selectResourceList) {\n resourceInfo.isSelected = false;\n }\n }\n\n handleSelectClick(event: MouseEvent, item: ResourceInfo) {\n if (!event.ctrlKey) {\n this.clearAllSelect();\n\n item.isSelected = true;\n return;\n }\n\n item.isSelected = !item.isSelected;\n }\n}\n","<template>\n <div :class=\"['resource-item',mode, resourceItem.isSelected ? 'is-selected' : '']\">\n <div class=\"resource-item__wrapper\">\n <div class=\"resource-item__main\">\n <MKSvgIcon :name=\"iconClass\" />\n </div>\n <div class=\"resource-item__label\">\n <span :title=\"resourceItem.name\">{{ resourceItem.name }}</span>\n </div>\n <div class=\"resource-item__time\">\n <span>{{ resourceItem.lastModified }}</span>\n </div>\n <div class=\"resource-item__size\">\n <span v-if=\"resourceItem.isDirectory\"> - </span>\n <span v-else> {{ resourceItem.length > 1024 ?\n (resourceItem.length > 1024*1024 ? Math.ceil(resourceItem.length/1024/1024*100)/100+\" MB\":Math.ceil(resourceItem.length/1024*100)/100+\" KB\") \n : resourceItem.length+\" 字节\" }}</span>\n </div>\n </div>\n </div>\n</template>\n<style scoped lang=\"scss\">\n@import \"index\";\n</style>\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { MKSvgIcon } from \"../../../../basic\";\n\nconst props = defineProps({\n resourceItem: {\n type: Object,\n required: true,\n },\n mode: {\n type: String,\n required: true,\n default:\"\"\n },\n});\n\nconst iconClass = computed(() => {\n if (props.resourceItem.isDirectory) {\n return \"ph:folder\";\n }\n\n switch (props.resourceItem.extension) {\n case \".html\":\n return \"ph:file-html\";\n case \".jpeg\":\n case \".jpg\":\n case \".png\":\n return \"ph:file-image\";\n case \".pdf\":\n return \"ph:file-pdf\";\n case \".dll\":\n return \"ph:file-x\";\n }\n\n return \"ph:file\";\n});\n</script>\n","<template>\n <div class=\"resource-list\" :class=\"{row:listMode=='row'}\">\n <div class=\"resource-list-header\">\n <ElBreadcrumb>\n <ElBreadcrumbItem>\n <ElButton text class=\"resource-list-breadcrumb-item\" v-if=\"resourceManager.directories.length>=1\"\n @click=\"handleBreadcrumbClick(resourceManager.directories.length-2)\"\n >\n <MKSvgIcon name=\"ep:arrow-left-bold\" class=\"m-r-1\" />\n 返回\n </ElButton>\n <ElButton text class=\"resource-list-breadcrumb-item\" @click=\"handleBreadcrumbClick()\">\n <MKSvgIcon name=\"ep:home-filled\" class=\"m-r-1\" />\n 根目录\n </ElButton>\n </ElBreadcrumbItem>\n <ElBreadcrumbItem v-for=\"(item, i) in resourceManager.directories\" :key=\"item\">\n <span class=\"resource-list-breadcrumb-item\" @click=\"handleBreadcrumbClick(i)\">\n {{ item }}\n </span>\n </ElBreadcrumbItem>\n </ElBreadcrumb>\n <div class=\"resource-list-mode\">\n <el-button text @click=\"sortMethodName=sortMethodName=='time'?'name':'time'\">{{sortMethodName=='name'?\"按照时间排序\":\"按照文件名排序\"}}</el-button>\n <el-button text @click=\"listMode = listMode=='row' ? 'col':'row'\">\n <MKSvgIcon v-if=\"listMode=='row'\" name=\"ep:grid\" />\n <MKSvgIcon v-else name=\"ep:fold\" />\n </el-button>\n <ElButton type=\"primary\" @click=\"handleUploadClick\">上传</ElButton>\n </div>\n </div>\n\n <div\n class=\"resource-list-main\"\n @click=\"handleMainClick\"\n @dragover.prevent\n @drop.prevent=\"handleDrop\"\n >\n <ElScrollbar height=\"100%\">\n <div class=\"resource-list-list\">\n <div\n v-for=\"item in resourceInfoList\"\n class=\"resource-list__item\"\n @click.stop=\"handleClick($event, item)\"\n @dblclick=\"handleDbClick(item)\"\n >\n <ResourceItem :key=\"item.path\" :mode=\"listMode\" :resourceItem=\"item\" />\n </div>\n </div>\n </ElScrollbar>\n </div>\n </div>\n</template>\n<style scoped lang=\"scss\">\n@import \"index\";\n</style>\n<script setup lang=\"ts\">\nimport { onMounted,ref , computed} from \"vue\";\nimport { ElScrollbar,ElButton } from \"element-plus\";\nimport { ResourceManager, ResourceInfo } from \"./ResourceManager\";\nimport ResourceItem from \"./components/ResourceItem/index.vue\";\nimport {MKSvgIcon} from \"../../basic\";\n\nconst props = defineProps({\n resourceManager: {\n type: ResourceManager,\n required: true,\n }\n});\n\n// 排序方法 修改时间排序 名称排序 time | name\nconst sortMethodName = ref(\"time\")\n\n/**\n * 资源列表\n */\nconst resourceInfoList = computed(()=>{\n\n if(sortMethodName.value == \"name\"){\n return [\n ...props.resourceManager.resourceInfoList.\n filter(item=>item.isDirectory).sort((a,b)=>a.name > b.name ? 1 : -1),\n ...props.resourceManager.resourceInfoList.\n filter(item=>!item.isDirectory).sort((a,b)=>a.name > b.name ? 1 : -1)\n ];\n }\n\n return props.resourceManager.resourceInfoList.sort((a,b)=>a.lastModified < b.lastModified ? 1 : -1)\n})\n\nconst emit = defineEmits([\"drop\"]);\nconst listMode = ref(\"row\")\n\nconst handleBreadcrumbClick = (index?: number) => {\n if (typeof index !== \"number\") {\n props.resourceManager.loadResourceInfoList(\"/\");\n\n return;\n }\n\n props.resourceManager.loadResourceInfoList(\n props.resourceManager.directories.splice(0, index + 1).join(\"/\")\n );\n};\n\nconst handleMainClick = () => {\n props.resourceManager.clearAllSelect();\n};\n\nconst handleClick = (event: MouseEvent, item: ResourceInfo) => {\n props.resourceManager.handleSelectClick(event, item);\n};\n\nconst handleDbClick = (item: ResourceInfo) => {\n if (!item.isDirectory) {\n return;\n }\n\n props.resourceManager.loadResourceInfoList(item.path);\n};\n\nconst handleDrop = async (event: DragEvent) => {\n emit(\"drop\", event);\n};\n\nconst handleUploadClick = () => {\n /** @type {HTMLInputElement} */\n var input = document.createElement(\"input\");\n input.type = \"file\";\n input.multiple = true;\n\n input.addEventListener(\"change\", () => {\n var files = new Array(input.files!.length)\n .fill(0)\n .map((_, i) => input.files![i]);\n\n props.resourceManager.uploadResourceList(files);\n });\n\n input.click();\n};\n\n\nonMounted(() => {\n props.resourceManager.loadResourceInfoList();\n});\n\n</script>\n","import { withInstall } from \"@maketribe/utils\";\nimport ResourceList from \"./ResourceList.vue\";\n\nexport const MKResourceList = withInstall(ResourceList);\n\nexport default MKResourceList;\n\nexport * from \"./ResourceManager\";\n","<template>\n <div v-loading=\"resourceManager.loading\" class=\"resource-manager\">\n <el-page-header style=\"background-color: #fff;padding: 10px;\" :icon=\"null\">\n <template #title>\n <h3 style=\"color: var(--el-text-color-regular);\" m=\"l-[10px]\" flex=\"~ items-center\">\n <MKSvgIcon name=\"octicon:project-template-24\" m=\"r-[5px]\" />\n <span style=\"margin-left:10px\">{{props.title}}</span>\n </h3>\n </template>\n <template #extra>\n <ElButton\n v-if=\"selectResourceCount > 0\"\n type=\"danger\"\n @click=\"handleDeleteClick\"\n >\n 删除\n </ElButton>\n <ElButton\n v-if=\"\n selectResourceCount === 1 &&\n !resourceManager.selectResourceList[0].isDirectory\n \"\n @click=\"handleEdit\"\n >\n 编辑\n </ElButton>\n <ElButton\n v-if=\"\n selectResourceCount === 1 &&\n !resourceManager.selectResourceList[0].isDirectory\n \"\n @click=\"handleDownload()\"\n >\n 下载\n </ElButton>\n <!-- <ElButton type=\"primary\" @click=\"handleUploadClick\">上传</ElButton> -->\n <slot name=\"tools\"></slot>\n </template>\n </el-page-header>\n <div class=\"w-full h-full p-2 overflow-hidden\">\n <MKResourceList class=\"w-full h-full! bg-white \" :resourceManager=\"resourceManager\" @drop=\"handleDrop\" />\n </div>\n </div>\n\n <ElDialog v-model=\"isShowEditDialog\" @close=\"handleEditDialogClose\">\n <MKCodeEditor\n v-if=\"isShowEditDialog\"\n v-model=\"resourceManager.currentEditText\"\n />\n <template #footer>\n <ElButton @click=\"handleEditDialogClose\">取消</ElButton>\n <ElButton\n type=\"primary\"\n v-loading=\"resourceManager.loading\"\n @click=\"handleEditDialogConfirm\"\n >\n 保存\n </ElButton>\n </template>\n </ElDialog>\n\n <ElDialog\n v-model=\"isShowConfirmDialog\"\n title=\"文件已存在\"\n @close=\"handleDialogCancelClick\"\n >\n <div v-for=\"path in existPathList\" :key=\"path\">{{ path }}</div>\n\n <template #footer>\n <ElButton type=\"danger\" @click=\"handleDialogOverrideClick\">覆盖</ElButton>\n <ElButton type=\"warning\" @click=\"handleDialogSkipClick\">跳过</ElButton>\n <ElButton @click=\"handleDialogCancelClick\">取消</ElButton>\n </template>\n </ElDialog>\n</template>\n<style scoped lang=\"scss\">\n@import \"index\";\n</style>\n<script setup lang=\"ts\">\nimport { onMounted, computed, unref, ref } from \"vue\";\nimport { ElButton, ElMessageBox, ElMessage, ElDialog } from \"element-plus\";\nimport { MKCodeEditor } from \"../../basic\";\nimport { MKResourceList, ResourceManager } from \"../ResourceList\";\nimport {MKSvgIcon} from \"../../basic\";\n\nconst props = defineProps({\n title:{type:String,default:\"\"},\n resourceManager: {\n type: ResourceManager,\n required: true,\n },\n});\n\nconst isShowConfirmDialog = ref(false);\n\nlet waitUploadFiles: File[] = [];\nconst existPathList = ref([] as string[]);\n\nconst resourceManager = computed(() => props.resourceManager);\n\nconst isShowEditDialog = computed(\n () => unref(resourceManager).isShowEditDialog\n);\n\nconst selectResourceCount = computed(\n () => unref(resourceManager).selectResourceList.length\n);\n\nconst handleDeleteClick = async () => {\n const isConfirm = await ElMessageBox.confirm(\"是否删除选中文件\", {\n type: \"warning\",\n }).then(\n () => true,\n () => false\n );\n\n if (!isConfirm) {\n return;\n }\n\n unref(resourceManager).deleteSelectResourceList();\n};\n\nconst handleEdit = () => {\n unref(resourceManager).editSelectFile();\n};\n\nconst handleEditDialogConfirm = () => {\n unref(resourceManager).saveEditFile();\n};\n\nconst handleEditDialogClose = () => {\n unref(resourceManager).isShowEditDialog = false;\n unref(resourceManager).currentEditText = \"\";\n};\n\n\nconst handleDownload = () => {\n unref(resourceManager).downloadSelectResource();\n};\n\nconst handleDrop = async (event: DragEvent) => {\n waitUploadFiles = [];\n\n var _items = event.dataTransfer?.items;\n\n var fileSystemEntry = _items![0].webkitGetAsEntry() as any;\n\n const internalProcess = async (item: any, path: string = \"\") => {\n if (item.isFile) {\n return [\n await new Promise((resolve) => {\n item.file((file: File) => {\n resolve(\n new File([file], `${path}${file.name}`, { type: file.type })\n );\n });\n }),\n ] as File[];\n } else if (item.isDirectory) {\n var directoryReader = item.createReader();\n\n const entries = (await new Promise((resolve) => {\n directoryReader.readEntries(resolve);\n })) as any[];\n\n var result: File[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n result = result.concat(\n await internalProcess(entries[i], `${path}${item.name}/`)\n );\n }\n\n return result;\n }\n\n return [];\n };\n\n const files = (waitUploadFiles = await internalProcess(fileSystemEntry));\n\n try {\n unref(resourceManager).loadingManager.startLoading();\n\n const checkResponse = await unref(resourceManager).getExistPathList(\n files.map((file) => file.name)\n );\n\n if (checkResponse.data.code !== 200) {\n ElMessage.error({ message: checkResponse.data.msg });\n return;\n }\n\n if (checkResponse.data.data?.length === 0) {\n await unref(resourceManager).uploadResourceList(files);\n\n waitUploadFiles = [];\n return;\n }\n existPathList.value = checkResponse.data.data ?? [];\n\n isShowConfirmDialog.value = true;\n } catch (e) {\n console.log(e);\n ElMessage.error(\"网络异常,上传失败\");\n } finally {\n unref(resourceManager).loadingManager.completeLoading();\n }\n};\n\nconst handleDialogOverrideClick = async () => {\n try {\n await unref(resourceManager).uploadResourceList(waitUploadFiles);\n } catch (e) {\n console.log(e);\n ElMessage.error(\"网络异常,上传失败\");\n }\n\n handleDialogCancelClick();\n};\n\nconst handleDialogSkipClick = async () => {\n try {\n const files = waitUploadFiles.filter(\n (file) => !unref(existPathList).includes(file.name)\n );\n if (files.length) {\n await unref(resourceManager).uploadResourceList(files);\n }\n } catch (e) {\n console.log(e);\n ElMessage.error(\"网络异常,上传失败\");\n }\n\n handleDialogCancelClick();\n};\n\nconst handleDialogCancelClick = () => {\n isShowConfirmDialog.value = false;\n existPathList.value = [];\n waitUploadFiles = [];\n};\n\nonMounted(() => {\n unref(resourceManager).loadResourceInfoList();\n});\n</script>\n","import { withInstall } from \"@maketribe/utils\";\nimport ResourceManager from \"./index.vue\";\n\nexport const MKResourceManager = withInstall(ResourceManager);\n\nexport default MKResourceManager;\n","import { ExtractPropTypes } from \"vue\";\nimport { buildProps } from \"@maketribe/utils\";\nimport {WebFileUpload} from \"@maketribe/request\";\n\n/**\n * 上传文件的props\n */\nexport const UploadFileProps = buildProps({\n uploadService: {\n type: WebFileUpload,\n },\n modelValue: {\n type: [String, Array<String>],\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n accept:{\n type: String,\n default: \"*\",\n }\n} as const);\n\nexport type UploadFileProps = ExtractPropTypes<typeof UploadFileProps>;\n\nexport const UploadFileEmits = {\n \"update:modelValue\": (path: string | string[]) => true,\n};\n\nexport type UploadFileEmits = typeof UploadFileEmits;\n\n/**\n * 上传视频的props\n */\nexport const UploadVideoProps = buildProps({\n ...UploadFileProps,\n width: {\n type: String,\n default: \"180px\",\n },\n height: {\n type: String,\n default: \"180px\",\n },\n\n} as const);\n\n/**\n * 上传图片的props\n */\nexport const UploadImageProps = buildProps({\n ...UploadVideoProps,\n fit: {\n type: String,\n // contain fill cover none scale-down\n default: \"contain\",\n },\n cutSize: {\n type: String,\n // xxx*xxx\n default: \"\",\n }\n} as const);\n\n\n","import {computed, unref, watch} from \"vue\";\nimport {ProgressEvent, UploadItem, WebFileUpload} from \"@maketribe/request\";\nimport {fileSelect,SingleFileSelectOptions} from \"@maketribe/utils\";\n\n/**\n * 上传项信息\n */\nexport type WebFileUploadItemInfo = {\n progress: number;\n completed: boolean;\n error?: string;\n name?: string;\n size?: number;\n path?: string;\n};\n\n/**\n * 根据文件路径获取文件名称\n * @param path\n */\nconst getFileNameByPath = (path:string):string=>{\n return path.substring(path.lastIndexOf(\"/\")+1,0);\n}\n\n/**\n * 使用 web 上传 服务\n * @param webFileUpload\n */\nexport const useUploadService = (webFileUpload?: WebFileUpload) => {\n\n // 上传\n webFileUpload ??= new WebFileUpload();\n\n return {\n /**\n * 文件选择\n * @param options\n */\n async fileSelect(options?:SingleFileSelectOptions|undefined): Promise<File | null> {\n return await fileSelect(options);\n },\n\n /**\n * 上传\n * @param file\n */\n async fileUpload(file:File): Promise<WebFileUploadItemInfo> {\n\n return new Promise<WebFileUploadItemInfo>(resolve => {\n\n webFileUpload.uploadEvent.once((data:any)=>{\n\n const uploadItem:UploadItem<File> = data.uploadItem;\n\n const uploadItemInfo = reactive({\n progress:0,\n name:uploadItem.payload.name,\n size:uploadItem.payload.size,\n completed:false,\n path:\"\",\n error:\"\"\n }) as WebFileUploadItemInfo;\n\n // 上传中\n uploadItem.progressEvent.on((ev:ProgressEvent)=>{\n uploadItemInfo.progress = Math.round((ev.progress ?? 0) * 100);\n })\n\n // 上传完成\n uploadItem.completeEvent.once(()=>{\n // 上传的 path\n if(uploadItem.response?.data.code === 200){\n uploadItemInfo.path = uploadItem.response.data.data.path;\n if(uploadItemInfo.path){\n uploadItemInfo.name = getFileNameByPath(uploadItemInfo.path);\n }\n }\n else if(uploadItem.response){\n uploadItemInfo.error = uploadItem.response.data.msg;\n }\n setTimeout(()=>{\n uploadItemInfo.completed = true;\n },500)\n })\n\n resolve(uploadItemInfo);\n });\n\n // 发起上传\n webFileUpload.upload(file)\n })\n }\n }\n}\n\n/**\n * 使用文件上传组合API服务\n * @param props\n * @param options\n */\nexport const useUploadComposable = (props:any, options:any) => {\n\n // 响应值\n const modelValue = computed({\n get: () => props.modelValue as string[] | string,\n set: (v: string[] | string) => options.emit(\"update:modelValue\", v),\n });\n\n /**\n * 值列表\n */\n const values = computed(() => {\n return (props.multiple && Array.isArray(modelValue.value) ? modelValue.value : (modelValue.value ? [modelValue.value]:[]) ) as string[]\n })\n\n // 上传项\n const uploadItems = reactive([]) as WebFileUploadItemInfo[];\n\n // 自动剔除 上传完成的\n watch(()=>uploadItems,()=>{\n for(let i=0 ;i< uploadItems.length;i++){\n if(uploadItems[i].completed){\n appendFilePath(uploadItems.splice(i, 1)[0].path!)\n }\n }\n },{ deep:true })\n\n // 显示项\n const viewItems = computed(() => {\n return values.value.map(path=>{\n return {\n progress:1,\n name:getFileNameByPath(path),\n size:0,\n completed:true,\n path:path,\n } as WebFileUploadItemInfo;\n }).concat(uploadItems)\n })\n\n // 删除\n const deleteFilePath = (src: string) => {\n\n if (props.multiple) {\n\n const index = unref(modelValue).indexOf(src);\n\n if (index >= 0) {\n (modelValue.value as string[]).splice(index, 1);\n }\n\n }\n else{\n modelValue.value = \"\";\n }\n };\n\n // 添加\n const appendFilePath = (src: string) => {\n\n const filePaths = unref(modelValue);\n\n if (Array.isArray(filePaths)) { filePaths.push(src); }\n else{\n modelValue.value = src;\n }\n };\n\n return {\n values,\n uploadItems,\n viewItems,\n deleteFilePath,\n appendFilePath\n }\n}\n","<template>\n <svg height=\"400\" viewBox=\"0 0 600 400\" width=\"600\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><defs node-id=\"128\"></defs><path d=\"M 0.00 0.00 L 600.00 0.00 L 600.00 400.00 L 0.00 400.00 Z\" fill=\"#ffffff\" fill-rule=\"evenodd\" hidden=\"true\" node-id=\"131\" stroke=\"none\" target-height=\"400\" target-width=\"600\" target-x=\"0\" target-y=\"0\" visibility=\"hidden\"></path><g node-id=\"133\"><path d=\"M 540.90 192.50 L 542.70 192.40 L 545.40 193.20 L 546.80 194.50 L 547.70 196.00 L 548.00 197.70 L 547.70 199.40 L 546.40 201.10 L 545.40 201.80 L 542.60 202.00 L 538.10 200.80 L 535.40 199.60 L 528.90 196.10 L 540.90 192.50 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"7\" stroke=\"none\" target-height=\"9.600006\" target-width=\"19.099976\" target-x=\"528.9\" target-y=\"192.4\"></path><path d=\"M 553.60 166.30 L 555.40 165.90 L 558.10 166.20 L 559.80 167.20 L 560.90 168.50 L 561.50 170.10 L 561.60 171.80 L 560.70 173.70 L 559.80 174.60 L 557.10 175.30 L 552.40 175.00 L 549.50 174.40 L 542.50 172.20 L 553.60 166.30 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"8\" stroke=\"none\" target-height=\"9.400009\" target-width=\"19.099976\" target-x=\"542.5\" target-y=\"165.9\"></path><path d=\"M 528.90 196.10 L 528.60 188.10 L 527.80 181.70 L 527.00 178.80 L 526.00 176.70 L 525.10 175.80 L 524.10 175.40 L 522.90 175.60 L 521.60 176.40 L 520.70 177.60 L 520.20 179.30 L 520.20 183.00 L 520.70 185.20 L 521.90 188.50 L 523.80 191.50 L 525.30 193.40 L 528.90 196.10 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"9\" stroke=\"none\" target-height=\"20.700012\" target-width=\"8.700012\" target-x=\"520.2\" target-y=\"175.4\"></path><path d=\"M 525.90 208.10 L 529.70 207.20 L 531.10 207.30 L 533.30 208.50 L 534.00 209.40 L 534.60 210.90 L 534.60 212.70 L 534.00 214.30 L 532.80 215.70 L 530.30 216.70 L 525.60 216.90 L 522.60 216.60 L 515.40 215.10 L 525.90 208.10 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"10\" stroke=\"none\" target-height=\"9.699997\" target-width=\"19.199951\" target-x=\"515.4\" target-y=\"207.2\"></path><path d=\"M 515.60 215.20 L 514.40 207.80 L 512.50 202.00 L 510.30 198.80 L 509.10 197.70 L 507.60 197.00 L 505.90 196.80 L 503.90 197.20 L 501.90 198.20 L 500.70 199.30 L 500.10 200.40 L 499.90 201.80 L 500.80 204.80 L 502.30 207.00 L 504.60 209.30 L 507.20 211.30 L 512.90 214.40 L 515.60 215.20 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"11\" stroke=\"none\" target-height=\"18.399994\" target-width=\"15.699982\" target-x=\"499.9\" target-y=\"196.8\"></path><path d=\"M 542.50 172.30 L 539.50 165.40 L 536.00 160.30 L 533.20 157.80 L 531.70 157.10 L 530.10 156.80 L 528.40 157.10 L 526.60 158.00 L 524.90 159.50 L 524.00 160.80 L 523.70 162.10 L 523.90 163.40 L 525.50 166.10 L 527.60 167.80 L 530.30 169.40 L 533.40 170.70 L 539.70 172.20 L 542.50 172.30 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"12\" stroke=\"none\" target-height=\"15.5\" target-width=\"18.799988\" target-x=\"523.7\" target-y=\"156.8\"></path><path d=\"M 522.00 227.70 L 524.20 224.70 L 525.20 223.90 L 527.70 223.20 L 528.80 223.40 L 530.30 224.10 L 531.50 225.30 L 532.30 227.40 L 532.20 228.70 L 531.10 231.20 L 527.70 234.40 L 525.30 236.20 L 518.90 239.90 L 522.00 227.70 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"13\" stroke=\"none\" target-height=\"16.699997\" target-width=\"13.399963\" target-x=\"518.9\" target-y=\"223.2\"></path><path d=\"M 519.00 239.90 L 513.20 235.40 L 507.80 232.50 L 504.10 231.50 L 502.50 231.50 L 500.90 231.90 L 499.60 232.80 L 498.40 234.40 L 497.80 236.00 L 497.70 237.30 L 498.10 238.50 L 498.90 239.50 L 501.50 241.10 L 504.10 241.90 L 507.20 242.20 L 510.40 242.20 L 513.60 241.80 L 516.60 241.00 L 519.00 239.90 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"14\" stroke=\"none\" target-height=\"10.699997\" target-width=\"21.299988\" target-x=\"497.7\" target-y=\"231.5\"></path><path d=\"M 541.20 275.60 L 544.00 271.30 L 546.90 268.10 L 548.60 266.80 L 551.30 265.90 L 553.40 266.80 L 554.50 267.90 L 554.90 269.00 L 554.80 270.00 L 553.50 272.00 L 549.90 274.20 L 547.10 275.10 L 544.20 275.60 L 541.20 275.60 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"15\" stroke=\"none\" target-height=\"9.700012\" target-width=\"13.700012\" target-x=\"541.2\" target-y=\"265.9\"></path><path d=\"M 541.20 275.60 L 538.40 271.30 L 535.50 268.10 L 533.80 266.80 L 531.10 265.90 L 528.90 266.80 L 527.90 267.90 L 527.50 269.00 L 527.60 270.00 L 528.90 272.00 L 532.50 274.20 L 535.20 275.10 L 538.20 275.60 L 541.20 275.60 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"16\" stroke=\"none\" target-height=\"9.700012\" target-width=\"13.700012\" target-x=\"527.5\" target-y=\"265.9\"></path><path d=\"M 536.70 261.50 L 536.90 253.40 L 537.40 249.90 L 539.30 243.90 L 541.80 239.70 L 543.50 238.00 L 545.50 236.70 L 548.00 235.70 L 550.60 235.40 L 552.80 235.70 L 554.50 236.60 L 556.00 237.90 L 557.00 239.50 L 557.60 241.60 L 557.70 243.80 L 557.30 246.20 L 556.40 248.80 L 554.90 251.20 L 552.70 253.70 L 549.70 256.10 L 544.40 259.00 L 536.70 261.50 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"17\" stroke=\"none\" target-height=\"26.100006\" target-width=\"21\" target-x=\"536.7\" target-y=\"235.4\"></path><path d=\"M 542.10 173.10 L 540.10 161.40 L 539.50 153.20 L 539.60 149.10 L 540.10 145.20 L 541.10 141.80 L 542.10 139.80 L 543.30 138.30 L 544.80 137.10 L 546.80 136.30 L 548.30 136.20 L 549.70 136.80 L 550.80 137.80 L 551.80 139.30 L 552.60 141.50 L 553.20 145.00 L 553.40 149.30 L 553.00 153.80 L 552.00 158.50 L 549.80 164.30 L 546.50 169.40 L 544.40 171.40 L 542.10 173.10 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"18\" stroke=\"none\" target-height=\"36.90001\" target-width=\"13.900024\" target-x=\"539.5\" target-y=\"136.2\"></path><path d=\"M 536.70 261.50 L 533.50 257.90 L 530.80 255.70 L 527.70 253.60 L 523.80 251.60 L 521.00 250.70 L 517.80 250.10 L 514.30 249.80 L 511.60 250.10 L 509.80 250.70 L 508.70 251.50 L 508.00 252.60 L 507.90 253.80 L 508.40 255.30 L 509.40 256.60 L 513.20 259.40 L 518.80 261.40 L 522.80 262.00 L 526.70 262.30 L 531.30 262.10 L 536.70 261.50 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"19\" stroke=\"none\" target-height=\"12.499985\" target-width=\"28.800018\" target-x=\"507.9\" target-y=\"249.8\"></path><path d=\"M 542.50 292.80 L 542.00 292.50 L 541.80 292.00 L 541.60 285.20 L 540.30 274.50 L 537.80 265.70 L 536.40 262.30 L 533.70 257.50 L 531.00 253.70 L 522.20 244.10 L 517.90 238.60 L 515.30 233.20 L 514.40 230.20 L 513.90 226.70 L 513.60 222.40 L 513.80 218.70 L 514.80 212.70 L 516.30 208.80 L 518.00 205.70 L 520.20 202.90 L 522.50 200.50 L 530.80 193.60 L 535.70 188.60 L 539.00 183.40 L 540.20 180.40 L 542.00 171.90 L 542.50 171.70 L 543.00 172.00 L 543.20 172.50 L 542.50 177.10 L 541.50 180.90 L 540.30 184.00 L 538.70 186.90 L 535.00 191.60 L 523.40 201.50 L 519.20 206.50 L 517.50 209.50 L 516.20 213.20 L 515.20 218.80 L 515.00 222.40 L 515.80 229.90 L 516.60 232.70 L 519.10 237.80 L 523.20 243.10 L 529.10 249.30 L 534.00 255.40 L 537.60 261.70 L 539.10 265.10 L 541.60 274.20 L 542.40 279.10 L 543.20 292.00 L 543.00 292.50 L 542.50 292.80 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"1\" id=\"Path\" node-id=\"20\" stroke=\"none\" target-height=\"121.09999\" target-width=\"29.600037\" target-x=\"513.6\" target-y=\"171.7\"></path></g><g node-id=\"134\"><path d=\"M 59.50 177.20 L 57.50 174.40 L 56.40 172.10 L 55.30 167.10 L 55.80 162.90 L 57.30 160.10 L 57.70 160.40 L 56.50 163.10 L 56.00 167.10 L 57.10 171.80 L 59.80 176.60 L 59.50 177.20 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"22\" stroke=\"none\" target-height=\"17.09999\" target-width=\"4.5\" target-x=\"55.3\" target-y=\"160.1\"></path><path d=\"M 123.60 293.90 L 118.50 288.60 L 113.70 284.10 L 104.10 276.90 L 95.20 271.70 L 88.70 268.80 L 69.30 261.90 L 66.70 260.40 L 65.40 259.20 L 64.70 257.90 L 64.40 256.30 L 64.80 255.00 L 66.10 253.00 L 68.00 251.20 L 73.00 248.30 L 78.20 246.90 L 81.00 246.70 L 84.10 247.00 L 87.60 247.70 L 94.70 250.40 L 98.60 252.50 L 102.20 254.90 L 105.90 257.90 L 109.50 261.40 L 112.70 265.30 L 115.70 269.80 L 118.50 275.00 L 120.20 279.00 L 122.70 288.40 L 123.60 293.90 Z\" fill=\"#dceefd\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"23\" stroke=\"none\" target-height=\"47.199997\" target-width=\"59.199997\" target-x=\"64.4\" target-y=\"246.7\"></path><path d=\"M 43.40 154.70 L 45.90 151.10 L 48.70 148.00 L 51.70 145.30 L 55.10 143.10 L 58.70 141.20 L 62.50 139.70 L 66.50 138.70 L 70.70 138.00 L 74.90 137.80 L 79.20 138.00 L 83.70 138.60 L 88.20 139.70 L 92.60 141.10 L 97.00 143.00 L 101.40 145.30 L 105.70 148.10 L 109.80 151.20 L 113.70 154.70 L 117.50 158.80 L 121.20 163.30 L 124.50 168.10 L 127.50 173.30 L 130.20 179.10 L 132.70 185.50 L 134.70 191.90 L 136.30 198.80 L 137.50 206.40 L 138.30 214.60 L 138.50 222.60 L 138.20 231.30 L 137.40 240.60 L 135.90 250.70 L 133.90 260.40 L 131.30 270.80 L 127.90 281.90 L 123.60 293.90 L 120.80 276.60 L 117.30 263.10 L 114.90 255.60 L 112.00 248.20 L 108.60 240.70 L 105.90 235.90 L 99.90 226.90 L 96.40 222.80 L 92.60 219.10 L 88.40 215.80 L 62.40 197.80 L 55.20 192.20 L 50.70 188.30 L 47.00 184.50 L 44.00 180.80 L 42.10 177.80 L 40.70 174.80 L 39.80 171.70 L 39.30 168.60 L 39.40 165.50 L 40.00 162.20 L 41.30 158.60 L 43.40 154.70 Z\" fill=\"#f3f9ff\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"24\" stroke=\"none\" target-height=\"156.09999\" target-width=\"99.2\" target-x=\"39.3\" target-y=\"137.8\"></path><path d=\"M 123.60 293.90 L 131.40 289.80 L 153.00 280.10 L 159.30 277.00 L 164.70 273.80 L 168.00 271.30 L 170.70 268.70 L 172.90 265.90 L 175.20 261.10 L 175.90 258.30 L 176.40 250.30 L 175.40 242.40 L 174.30 238.80 L 172.90 236.00 L 171.10 233.70 L 169.40 232.30 L 167.60 231.30 L 165.40 230.70 L 162.80 230.50 L 160.00 231.30 L 155.20 234.10 L 149.30 239.20 L 146.40 242.40 L 139.90 251.20 L 136.90 256.20 L 133.90 262.20 L 130.90 269.20 L 128.30 276.30 L 125.80 284.50 L 123.60 293.90 Z\" fill=\"#e7f4fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"25\" stroke=\"none\" target-height=\"63.399994\" target-width=\"52.799995\" target-x=\"123.6\" target-y=\"230.5\"></path><path d=\"M 119.80 238.70 L 117.90 234.60 L 117.00 233.20 L 115.70 232.00 L 114.30 231.20 L 112.20 230.70 L 112.40 230.10 L 114.50 230.50 L 116.10 231.40 L 117.40 232.70 L 118.40 234.10 L 119.80 236.80 L 120.20 238.20 L 119.80 238.70 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"26\" stroke=\"none\" target-height=\"8.599991\" target-width=\"8\" target-x=\"112.2\" target-y=\"230.1\"></path><path d=\"M 122.20 255.10 L 121.90 254.70 L 122.80 251.70 L 124.90 248.70 L 126.50 247.70 L 126.90 248.20 L 125.30 249.30 L 124.20 250.60 L 122.20 255.10 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"27\" stroke=\"none\" target-height=\"7.400009\" target-width=\"5\" target-x=\"121.9\" target-y=\"247.7\"></path><path d=\"M 109.70 203.30 L 106.80 198.00 L 105.30 196.20 L 101.80 193.50 L 97.20 191.60 L 92.30 191.00 L 89.00 191.20 L 88.50 190.90 L 88.80 190.50 L 94.80 190.50 L 97.40 191.00 L 102.20 192.90 L 105.80 195.70 L 107.40 197.60 L 110.10 202.80 L 109.70 203.30 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"28\" stroke=\"none\" target-height=\"12.800003\" target-width=\"21.599998\" target-x=\"88.5\" target-y=\"190.5\"></path><path d=\"M 114.40 216.00 L 114.00 215.80 L 113.40 212.40 L 113.20 209.50 L 114.00 204.60 L 115.50 201.10 L 117.00 199.00 L 119.90 196.40 L 120.20 196.80 L 117.50 199.50 L 116.10 201.60 L 114.90 204.00 L 114.10 207.30 L 113.90 209.60 L 114.70 215.60 L 114.40 216.00 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"29\" stroke=\"none\" target-height=\"19.600006\" target-width=\"7\" target-x=\"113.2\" target-y=\"196.4\"></path><path d=\"M 123.60 294.20 L 118.00 284.90 L 114.90 280.90 L 111.60 277.20 L 104.60 270.90 L 99.20 266.80 L 88.90 260.80 L 84.50 258.70 L 74.70 254.90 L 75.10 254.40 L 77.80 255.30 L 88.90 260.00 L 99.10 265.90 L 104.50 269.90 L 111.40 276.10 L 114.80 279.70 L 117.90 283.60 L 120.70 287.90 L 123.30 292.50 L 123.20 272.40 L 122.00 255.90 L 119.30 237.20 L 117.60 228.90 L 115.30 220.00 L 112.50 211.20 L 109.10 202.40 L 106.40 196.60 L 100.20 185.70 L 96.50 180.50 L 92.50 175.80 L 88.10 171.30 L 84.50 168.30 L 76.60 163.00 L 72.30 160.80 L 72.30 160.10 L 76.60 162.20 L 81.00 164.90 L 85.60 168.40 L 90.00 172.20 L 94.40 177.00 L 99.00 182.80 L 102.00 187.30 L 108.00 198.40 L 111.00 205.10 L 113.40 211.70 L 115.80 219.20 L 118.00 227.60 L 120.00 237.00 L 121.80 248.20 L 122.90 258.40 L 124.00 276.50 L 124.10 289.10 L 124.00 293.90 L 123.60 294.20 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"30\" stroke=\"none\" target-height=\"134.1\" target-width=\"51.799995\" target-x=\"72.3\" target-y=\"160.1\"></path><path d=\"M 123.60 294.20 L 123.30 294.10 L 123.40 293.60 L 130.00 288.10 L 140.40 278.10 L 148.80 268.30 L 156.10 257.70 L 159.00 252.60 L 161.30 247.90 L 163.60 241.70 L 164.10 242.10 L 163.20 245.10 L 159.60 252.90 L 156.80 258.00 L 149.40 268.70 L 141.00 278.50 L 136.10 283.40 L 130.40 288.60 L 123.60 294.20 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"31\" stroke=\"none\" target-height=\"52.500015\" target-width=\"40.800003\" target-x=\"123.3\" target-y=\"241.7\"></path><path d=\"M 94.00 263.50 L 92.10 262.00 L 91.10 260.70 L 90.50 259.20 L 90.20 256.50 L 90.70 254.50 L 91.20 254.60 L 90.90 257.70 L 91.30 259.50 L 92.80 261.70 L 94.30 263.00 L 94.00 263.50 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"32\" stroke=\"none\" target-height=\"9\" target-width=\"4.100006\" target-x=\"90.2\" target-y=\"254.5\"></path><path d=\"M 106.90 272.70 L 102.90 269.80 L 101.10 269.00 L 98.30 268.10 L 94.00 267.60 L 93.70 267.20 L 94.00 266.90 L 98.50 267.40 L 101.40 268.40 L 105.20 270.50 L 107.20 272.10 L 106.90 272.70 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"33\" stroke=\"none\" target-height=\"5.8000183\" target-width=\"13.5\" target-x=\"93.7\" target-y=\"266.9\"></path><path d=\"M 152.30 264.50 L 152.10 264.00 L 154.30 259.80 L 154.80 257.80 L 154.90 254.90 L 153.70 250.10 L 152.10 246.90 L 152.10 246.40 L 152.60 246.50 L 154.40 249.80 L 155.10 252.30 L 155.60 254.90 L 155.40 258.00 L 155.00 260.00 L 154.10 262.10 L 152.30 264.50 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"34\" stroke=\"none\" target-height=\"18.100006\" target-width=\"3.5\" target-x=\"152.1\" target-y=\"246.4\"></path><path d=\"M 138.50 281.00 L 138.30 280.40 L 144.10 275.70 L 149.60 272.90 L 153.80 272.00 L 154.00 272.60 L 149.80 273.60 L 146.60 275.10 L 141.80 278.20 L 138.50 281.00 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"2\" id=\"Path\" node-id=\"35\" stroke=\"none\" target-height=\"9\" target-width=\"15.699997\" target-x=\"138.3\" target-y=\"272\"></path></g><g node-id=\"135\"><path d=\"M 263.80 118.70 L 260.50 115.50 L 258.40 111.50 L 257.70 107.00 L 257.90 104.70 L 258.40 102.60 L 260.50 98.60 L 262.00 96.90 L 267.10 92.90 L 269.80 90.40 L 271.80 88.00 L 273.30 85.60 L 274.30 83.10 L 274.70 80.40 L 274.50 77.60 L 273.60 74.50 L 272.10 71.80 L 270.20 69.60 L 268.10 68.00 L 265.50 66.90 L 262.80 66.30 L 259.70 66.00 L 256.10 66.10 L 249.60 66.90 L 247.30 66.80 L 243.10 65.50 L 239.40 62.80 L 236.70 59.10 L 235.40 54.80 L 235.20 52.60 L 236.10 46.10 L 236.20 42.50 L 235.90 39.40 L 235.30 36.60 L 234.20 34.10 L 232.60 31.90 L 230.40 30.10 L 227.60 28.60 L 224.60 27.70 L 221.80 27.50 L 219.10 27.90 L 216.60 28.90 L 214.20 30.40 L 211.80 32.40 L 209.30 35.00 L 205.30 40.20 L 203.60 41.70 L 199.70 43.80 L 195.20 44.50 L 190.70 43.70 L 186.70 41.70 L 185.00 40.20 L 181.00 35.00 L 178.60 32.40 L 176.20 30.40 L 173.80 28.90 L 171.20 27.90 L 168.50 27.50 L 165.70 27.70 L 162.70 28.60 L 159.90 30.10 L 157.80 31.90 L 156.20 34.10 L 155.10 36.60 L 154.50 39.40 L 154.20 42.50 L 154.30 46.10 L 155.10 52.60 L 155.00 54.80 L 153.60 59.10 L 151.00 62.80 L 147.30 65.50 L 143.00 66.80 L 140.80 66.90 L 134.30 66.10 L 130.70 66.00 L 127.60 66.30 L 124.80 66.90 L 122.30 68.00 L 120.10 69.60 L 118.30 71.80 L 116.80 74.50 L 115.90 77.60 L 115.70 80.40 L 116.10 83.10 L 117.10 85.60 L 118.60 88.00 L 120.60 90.40 L 123.20 92.90 L 128.40 96.90 L 129.90 98.60 L 131.90 102.60 L 132.70 107.00 L 131.90 111.50 L 129.90 115.50 L 128.40 117.20 L 123.20 121.20 L 120.60 123.70 L 118.60 126.10 L 117.10 128.40 L 116.10 131.00 L 115.70 133.70 L 115.90 136.50 L 116.80 139.50 L 118.30 142.30 L 120.10 144.50 L 122.30 146.10 L 124.80 147.20 L 127.60 147.80 L 130.70 148.10 L 134.30 148.00 L 140.80 147.10 L 143.00 147.30 L 147.30 148.60 L 151.00 151.30 L 153.60 155.00 L 155.00 159.30 L 155.10 161.50 L 154.30 168.00 L 154.20 171.60 L 154.50 174.70 L 155.10 177.50 L 156.20 180.00 L 157.80 182.20 L 159.90 184.00 L 162.70 185.50 L 165.70 186.40 L 168.50 186.60 L 171.20 186.20 L 173.80 185.20 L 176.20 183.70 L 178.60 181.70 L 181.00 179.10 L 185.00 173.90 L 186.70 172.40 L 190.70 170.30 L 195.20 169.60 L 199.70 170.30 L 203.60 172.40 L 205.30 173.90 L 209.30 179.10 L 211.80 181.70 L 214.20 183.70 L 216.60 185.20 L 219.10 186.20 L 221.80 186.60 L 224.60 186.40 L 227.60 185.50 L 230.40 184.00 L 232.60 182.20 L 234.20 180.00 L 235.30 177.50 L 235.90 174.70 L 236.20 171.60 L 236.00 168.00 L 235.20 161.50 L 235.40 159.30 L 236.70 155.00 L 239.40 151.30 L 243.10 148.60 L 247.30 147.30 L 249.60 147.10 L 256.10 148.00 L 259.70 148.10 L 262.80 147.80 L 265.50 147.20 L 268.10 146.10 L 270.20 144.50 L 272.10 142.30 L 273.60 139.50 L 274.50 136.50 L 274.70 133.70 L 274.30 131.00 L 273.30 128.40 L 271.80 126.10 L 269.80 123.70 L 267.10 121.20 L 263.80 118.70 Z\" fill=\"#f3f9ff\" fill-rule=\"nonzero\" group-id=\"3\" id=\"Path\" node-id=\"37\" stroke=\"none\" target-height=\"159.1\" target-width=\"159.00002\" target-x=\"115.7\" target-y=\"27.5\"></path><path d=\"M 237.60 107.00 L 237.40 111.50 L 236.70 115.70 L 235.70 119.70 L 234.30 123.60 L 230.30 130.80 L 225.20 137.10 L 218.90 142.20 L 211.70 146.20 L 207.80 147.60 L 203.80 148.60 L 199.60 149.30 L 195.20 149.50 L 190.80 149.30 L 186.60 148.60 L 182.50 147.60 L 178.70 146.20 L 171.50 142.20 L 165.20 137.10 L 160.00 130.80 L 156.10 123.60 L 154.70 119.70 L 153.60 115.70 L 153.00 111.50 L 152.80 107.00 L 153.00 102.60 L 153.60 98.40 L 154.70 94.40 L 156.10 90.50 L 160.00 83.30 L 165.20 77.00 L 171.50 71.80 L 178.70 67.90 L 182.50 66.50 L 186.60 65.50 L 190.80 64.80 L 195.20 64.60 L 199.60 64.80 L 203.80 65.50 L 207.80 66.50 L 211.70 67.90 L 218.90 71.80 L 225.20 77.00 L 230.30 83.30 L 234.30 90.50 L 235.70 94.40 L 236.70 98.40 L 237.40 102.60 L 237.60 107.00 Z\" fill=\"#dceefd\" fill-rule=\"nonzero\" group-id=\"3\" id=\"Oval\" node-id=\"38\" stroke=\"none\" target-height=\"84.9\" target-width=\"84.8\" target-x=\"152.8\" target-y=\"64.6\"></path><path d=\"M 237.60 107.00 L 237.40 111.40 L 236.70 115.70 L 235.70 119.70 L 234.30 123.60 L 230.30 130.80 L 227.90 134.00 L 222.10 139.80 L 215.40 144.40 L 211.70 146.20 L 207.80 147.60 L 203.80 148.60 L 199.60 149.30 L 195.20 149.50 L 187.00 148.70 L 183.10 147.70 L 175.70 144.80 L 169.20 140.50 L 163.50 135.20 L 167.40 138.30 L 171.70 141.00 L 176.30 143.10 L 183.70 145.20 L 191.60 146.00 L 196.00 145.70 L 200.20 145.10 L 204.30 144.10 L 208.10 142.60 L 215.40 138.70 L 221.60 133.50 L 226.80 127.20 L 230.70 120.00 L 232.20 116.10 L 233.20 112.10 L 233.80 107.90 L 234.10 103.50 L 233.30 95.50 L 231.20 88.10 L 229.10 83.50 L 226.40 79.30 L 223.30 75.30 L 228.60 81.00 L 230.90 84.20 L 234.50 91.20 L 236.80 98.80 L 237.60 107.00 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"3\" id=\"Path\" node-id=\"39\" stroke=\"none\" target-height=\"74.2\" target-width=\"74.100006\" target-x=\"163.5\" target-y=\"75.3\"></path><path d=\"M 226.90 78.90 L 222.90 75.70 L 218.70 73.10 L 214.10 71.00 L 206.70 68.90 L 198.70 68.10 L 194.30 68.40 L 190.10 69.00 L 186.10 70.00 L 182.20 71.50 L 175.00 75.40 L 168.70 80.60 L 163.60 86.80 L 159.60 94.10 L 158.20 97.90 L 157.20 102.00 L 156.50 106.20 L 156.30 110.60 L 156.50 114.70 L 157.90 122.30 L 159.10 125.90 L 161.30 130.60 L 163.90 134.80 L 167.00 138.70 L 164.20 136.00 L 159.40 129.90 L 155.80 122.90 L 153.60 115.30 L 152.80 107.00 L 153.00 102.60 L 153.60 98.40 L 154.70 94.40 L 156.10 90.50 L 160.00 83.30 L 165.20 77.00 L 171.50 71.90 L 178.70 67.90 L 182.60 66.50 L 186.60 65.50 L 190.80 64.80 L 195.20 64.60 L 203.40 65.40 L 211.00 67.70 L 218.00 71.30 L 221.20 73.50 L 226.90 78.90 Z\" fill=\"#d0e7fe\" fill-rule=\"nonzero\" group-id=\"3\" id=\"Path\" node-id=\"40\" stroke=\"none\" target-height=\"74.1\" target-width=\"74.09999\" target-x=\"152.8\" target-y=\"64.6\"></path></g><g node-id=\"136\"><path d=\"M 63.50 98.00 L 82.50 107.50 L 139.50 82.20 Z\" fill=\"#9aeec5\" fill-rule=\"nonzero\" group-id=\"4\" id=\"Path\" node-id=\"42\" stroke=\"none\" target-height=\"25.300003\" target-width=\"76\" target-x=\"63.5\" target-y=\"82.2\"></path><path d=\"M 85.70 123.40 L 82.50 107.50 L 139.50 82.20 Z\" fill=\"#7be6b1\" fill-rule=\"nonzero\" group-id=\"4\" id=\"Path\" node-id=\"43\" stroke=\"none\" target-height=\"41.200005\" target-width=\"57\" target-x=\"82.5\" target-y=\"82.2\"></path><path d=\"M 85.70 123.40 L 92.00 110.70 L 107.80 107.50 Z\" fill=\"#60dfa0\" fill-rule=\"nonzero\" group-id=\"4\" id=\"Path\" node-id=\"44\" stroke=\"none\" target-height=\"15.900002\" target-width=\"22.100006\" target-x=\"85.7\" target-y=\"107.5\"></path><path d=\"M 92.00 110.70 L 107.80 117.10 L 139.50 82.20 Z\" fill=\"#9aeec5\" fill-rule=\"nonzero\" group-id=\"4\" id=\"Path\" node-id=\"45\" stroke=\"none\" target-height=\"34.9\" target-width=\"47.5\" target-x=\"92\" target-y=\"82.2\"></path></g><g node-id=\"137\"><path d=\"M 477.50 294.80 L 189.20 294.80 L 187.40 294.70 L 184.30 293.50 L 182.30 292.00 L 180.80 290.00 L 179.60 286.80 L 179.40 285.10 L 179.40 90.60 L 180.00 87.20 L 180.80 85.70 L 182.30 83.70 L 184.30 82.20 L 185.80 81.40 L 189.20 80.80 L 477.50 80.80 L 479.30 81.00 L 482.50 82.20 L 484.40 83.70 L 486.00 85.70 L 487.10 88.80 L 487.30 90.60 L 487.30 285.10 L 486.70 288.50 L 486.00 290.00 L 484.40 292.00 L 482.50 293.50 L 480.90 294.20 L 477.50 294.80 Z\" fill=\"#224380\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"47\" stroke=\"none\" target-height=\"213.99998\" target-width=\"307.9\" target-x=\"179.4\" target-y=\"80.8\"></path><path d=\"M 190.70 92.10 L 476.00 92.10 L 476.00 283.60 L 190.70 283.60 Z\" fill=\"#f3f9ff\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Rectangle\" node-id=\"48\" stroke=\"none\" target-height=\"191.5\" target-width=\"285.3\" target-x=\"190.7\" target-y=\"92.1\"></path><g node-id=\"142\"><path d=\"M 315.20 206.30 L 232.70 206.30 L 231.20 206.60 L 230.00 207.40 L 229.20 208.60 L 228.90 210.10 L 228.90 247.60 L 229.20 249.10 L 230.00 250.30 L 231.20 251.10 L 232.70 251.40 L 315.20 251.40 L 316.70 251.10 L 317.90 250.30 L 318.70 249.10 L 319.00 247.60 L 319.00 210.10 L 318.70 208.60 L 317.90 207.40 L 316.70 206.60 L 315.20 206.30 Z\" fill=\"#dae7ff\" fill-rule=\"nonzero\" group-id=\"5,10\" id=\"Path\" node-id=\"50\" stroke=\"none\" target-height=\"45.09999\" target-width=\"90.100006\" target-x=\"228.9\" target-y=\"206.3\"></path><path d=\"M 315.20 202.70 L 232.70 202.70 L 231.20 203.00 L 230.00 203.80 L 229.20 205.00 L 228.90 206.50 L 228.90 244.00 L 229.20 245.50 L 230.00 246.70 L 231.20 247.50 L 232.70 247.80 L 315.20 247.80 L 316.70 247.50 L 317.90 246.70 L 318.70 245.50 L 319.00 244.00 L 319.00 206.50 L 318.70 205.00 L 317.90 203.80 L 316.70 203.00 L 315.20 202.70 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"5,10\" id=\"Path\" node-id=\"51\" stroke=\"none\" target-height=\"45.100006\" target-width=\"90.100006\" target-x=\"228.9\" target-y=\"202.7\"></path><path d=\"M 311.60 127.90 L 229.10 127.90 L 227.60 128.20 L 226.40 129.00 L 225.60 130.20 L 225.30 131.70 L 225.30 169.20 L 225.60 170.70 L 226.40 171.90 L 227.60 172.70 L 229.10 173.00 L 311.60 173.00 L 313.10 172.70 L 314.30 171.90 L 315.10 170.70 L 315.40 169.20 L 315.40 131.70 L 315.10 130.20 L 314.30 129.00 L 313.10 128.20 L 311.60 127.90 Z\" fill=\"#dae7ff\" fill-rule=\"nonzero\" group-id=\"5,10\" id=\"Path\" node-id=\"52\" stroke=\"none\" target-height=\"45.1\" target-width=\"90.09999\" target-x=\"225.3\" target-y=\"127.9\"></path><path d=\"M 311.60 124.30 L 229.10 124.30 L 227.60 124.60 L 226.40 125.40 L 225.60 126.60 L 225.30 128.10 L 225.30 165.60 L 225.60 167.10 L 226.40 168.30 L 227.60 169.10 L 229.10 169.40 L 311.60 169.40 L 313.10 169.10 L 314.30 168.30 L 315.10 167.10 L 315.40 165.60 L 315.40 128.10 L 315.10 126.60 L 314.30 125.40 L 313.10 124.60 L 311.60 124.30 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"5,10\" id=\"Path\" node-id=\"53\" stroke=\"none\" target-height=\"45.09999\" target-width=\"90.09999\" target-x=\"225.3\" target-y=\"124.3\"></path><g node-id=\"144\"><path d=\"M 266.60 139.30 L 266.60 133.70 L 307.90 133.70 L 307.90 139.30 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"5,10,12\" id=\"Rectangle\" node-id=\"54\" stroke=\"none\" target-height=\"5.600006\" target-width=\"41.299988\" target-x=\"266.6\" target-y=\"133.7\"></path></g><g node-id=\"145\"><path d=\"M 277.80 139.30 L 277.80 133.70 L 307.90 133.70 L 307.90 139.30 Z\" fill=\"#8484ef\" fill-rule=\"nonzero\" group-id=\"5,10,13\" id=\"Rectangle\" node-id=\"55\" stroke=\"none\" target-height=\"5.600006\" target-width=\"30.100006\" target-x=\"277.8\" target-y=\"133.7\"></path></g><g node-id=\"146\"><path d=\"M 266.60 150.60 L 266.60 145.00 L 307.90 145.00 L 307.90 150.60 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"5,10,14\" id=\"Rectangle\" node-id=\"56\" stroke=\"none\" target-height=\"5.600006\" target-width=\"41.299988\" target-x=\"266.6\" target-y=\"145\"></path></g><g node-id=\"147\"><path d=\"M 285.30 150.60 L 285.30 145.00 L 307.90 145.00 L 307.90 150.60 Z\" fill=\"#8484ef\" fill-rule=\"nonzero\" group-id=\"5,10,15\" id=\"Rectangle\" node-id=\"57\" stroke=\"none\" target-height=\"5.600006\" target-width=\"22.600006\" target-x=\"285.3\" target-y=\"145\"></path></g><g node-id=\"148\"><path d=\"M 266.60 161.90 L 266.60 156.20 L 307.90 156.20 L 307.90 161.90 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"5,10,16\" id=\"Rectangle\" node-id=\"58\" stroke=\"none\" target-height=\"5.699997\" target-width=\"41.299988\" target-x=\"266.6\" target-y=\"156.2\"></path></g><path d=\"M 300.40 161.90 L 300.40 156.20 L 307.90 156.20 L 307.90 161.90 Z\" fill=\"#8484ef\" fill-rule=\"nonzero\" group-id=\"5,10,17\" id=\"Rectangle\" node-id=\"59\" stroke=\"none\" target-height=\"5.699997\" target-width=\"7.5\" target-x=\"300.4\" target-y=\"156.2\"></path></g><path d=\"M 245.00 159.00 L 240.80 158.30 L 238.90 157.40 L 235.70 154.70 L 233.60 151.10 L 232.80 146.80 L 233.60 142.60 L 235.70 139.00 L 238.90 136.30 L 242.80 134.80 L 245.00 134.60 L 245.00 140.30 L 243.20 140.50 L 241.70 141.20 L 240.40 142.20 L 239.40 143.50 L 238.70 145.10 L 238.50 146.80 L 238.70 148.60 L 239.40 150.10 L 240.40 151.50 L 241.70 152.50 L 243.20 153.20 L 245.00 153.40 L 246.80 153.20 L 248.30 152.50 L 249.70 151.50 L 250.70 150.10 L 251.30 148.60 L 251.60 146.80 L 257.20 146.80 L 256.50 151.10 L 254.30 154.70 L 251.20 157.40 L 249.30 158.30 L 245.00 159.00 Z\" fill=\"#fff0c6\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"60\" stroke=\"none\" target-height=\"24.399994\" target-width=\"24.40001\" target-x=\"232.8\" target-y=\"134.6\"></path><path d=\"M 257.20 146.80 L 251.60 146.80 L 251.30 145.10 L 250.70 143.50 L 249.70 142.20 L 248.30 141.20 L 246.80 140.50 L 245.00 140.30 L 245.00 134.60 L 247.20 134.80 L 251.20 136.30 L 254.30 139.00 L 255.60 140.70 L 257.00 144.60 L 257.20 146.80 Z\" fill=\"#ffcb01\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"61\" stroke=\"none\" target-height=\"12.199997\" target-width=\"12.200012\" target-x=\"245\" target-y=\"134.6\"></path><path d=\"M 427.90 176.60 L 376.20 176.60 L 373.90 176.90 L 371.80 177.80 L 370.10 179.10 L 368.70 180.80 L 367.90 182.90 L 367.60 185.20 L 367.60 249.90 L 367.90 252.20 L 368.70 254.30 L 370.10 256.00 L 371.80 257.40 L 373.90 258.30 L 376.20 258.60 L 427.90 258.60 L 430.20 258.30 L 432.30 257.40 L 434.00 256.00 L 435.40 254.30 L 436.20 252.20 L 436.50 249.90 L 436.50 185.20 L 436.20 182.90 L 435.40 180.80 L 434.00 179.10 L 432.30 177.80 L 430.20 176.90 L 427.90 176.60 Z\" fill=\"#dae7ff\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"62\" stroke=\"none\" target-height=\"82\" target-width=\"68.899994\" target-x=\"367.6\" target-y=\"176.6\"></path><path d=\"M 427.90 173.00 L 376.20 173.00 L 373.90 173.30 L 371.80 174.10 L 370.10 175.50 L 368.70 177.20 L 367.90 179.30 L 367.60 181.60 L 367.60 246.30 L 367.90 248.60 L 368.70 250.70 L 370.10 252.40 L 371.80 253.80 L 373.90 254.70 L 376.20 255.00 L 427.90 255.00 L 430.20 254.70 L 432.30 253.80 L 434.00 252.40 L 435.40 250.70 L 436.20 248.60 L 436.50 246.30 L 436.50 181.60 L 436.20 179.30 L 435.40 177.20 L 434.00 175.50 L 432.30 174.10 L 430.20 173.30 L 427.90 173.00 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"63\" stroke=\"none\" target-height=\"82\" target-width=\"68.899994\" target-x=\"367.6\" target-y=\"173\"></path><path d=\"M 402.10 224.80 L 399.10 224.50 L 393.70 223.10 L 391.20 221.80 L 388.20 219.70 L 385.60 217.10 L 383.40 214.10 L 382.20 211.60 L 380.70 206.20 L 380.50 203.20 L 380.70 200.20 L 382.20 194.80 L 383.40 192.30 L 385.60 189.30 L 388.20 186.70 L 391.20 184.60 L 396.30 182.40 L 399.10 181.80 L 402.10 181.60 L 407.80 182.40 L 412.90 184.60 L 416.00 186.70 L 418.50 189.30 L 420.70 192.30 L 421.90 194.80 L 423.40 200.20 L 423.60 203.20 L 423.40 206.20 L 421.90 211.60 L 420.70 214.10 L 418.50 217.10 L 416.00 219.70 L 412.90 221.80 L 410.40 223.10 L 405.00 224.50 L 402.10 224.80 Z M 402.10 185.90 L 398.90 186.20 L 396.00 187.00 L 393.40 188.30 L 390.90 190.00 L 388.90 192.00 L 387.20 194.50 L 385.90 197.10 L 385.10 200.00 L 384.80 203.20 L 385.10 206.30 L 385.90 209.20 L 387.20 211.90 L 388.90 214.30 L 390.90 216.40 L 393.40 218.10 L 396.00 219.40 L 398.90 220.10 L 402.10 220.40 L 405.20 220.10 L 408.10 219.40 L 410.80 218.10 L 413.20 216.40 L 415.20 214.30 L 416.90 211.90 L 418.20 209.20 L 419.00 206.30 L 419.30 203.20 L 419.00 200.00 L 418.20 197.10 L 416.90 194.50 L 415.20 192.00 L 413.20 190.00 L 410.80 188.30 L 408.10 187.00 L 405.20 186.20 L 402.10 185.90 Z\" fill=\"#8484ef\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Shape\" node-id=\"64\" stroke=\"none\" target-height=\"43.199997\" target-width=\"43.100006\" target-x=\"380.5\" target-y=\"181.6\"></path><path d=\"M 402.10 224.80 L 399.10 224.50 L 393.70 223.10 L 391.20 221.80 L 388.20 219.70 L 385.60 217.10 L 383.40 214.10 L 382.20 211.60 L 380.70 206.20 L 380.50 203.20 L 380.70 200.20 L 382.20 194.80 L 383.40 192.30 L 385.60 189.30 L 388.20 186.70 L 391.20 184.60 L 396.30 182.40 L 399.10 181.80 L 402.10 181.60 L 403.60 182.20 L 404.20 183.80 L 403.60 185.30 L 402.90 185.70 L 398.90 186.20 L 396.00 187.00 L 393.40 188.30 L 390.90 190.00 L 388.90 192.00 L 387.20 194.50 L 385.90 197.10 L 385.10 200.00 L 384.80 203.20 L 385.10 206.30 L 385.90 209.20 L 387.20 211.90 L 388.90 214.30 L 390.90 216.40 L 393.40 218.10 L 396.00 219.40 L 398.90 220.10 L 402.10 220.40 L 405.20 220.10 L 408.10 219.40 L 410.80 218.10 L 413.20 216.40 L 415.20 214.30 L 416.90 211.90 L 418.20 209.20 L 419.00 206.30 L 419.50 202.30 L 419.90 201.70 L 421.50 201.00 L 422.30 201.20 L 423.40 202.30 L 423.60 203.20 L 423.40 206.20 L 421.90 211.60 L 420.70 214.10 L 418.50 217.10 L 416.00 219.70 L 412.90 221.80 L 410.40 223.10 L 405.00 224.50 L 402.10 224.80 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"65\" stroke=\"none\" target-height=\"43.199997\" target-width=\"43.100006\" target-x=\"380.5\" target-y=\"181.6\"></path><path d=\"M 425.80 203.20 L 425.60 204.30 L 424.50 206.20 L 423.60 206.90 L 421.50 207.50 L 419.30 206.90 L 418.40 206.20 L 417.30 204.30 L 417.30 202.00 L 418.40 200.10 L 419.30 199.40 L 421.50 198.90 L 423.60 199.40 L 424.50 200.10 L 425.60 202.00 L 425.80 203.20 Z\" fill=\"#4e3ccb\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Oval\" node-id=\"66\" stroke=\"none\" target-height=\"8.600006\" target-width=\"8.5\" target-x=\"417.3\" target-y=\"198.9\"></path><path d=\"M 410.70 233.40 L 392.60 233.60 L 391.40 234.70 L 391.30 235.50 L 391.90 237.10 L 393.40 237.70 L 411.50 237.50 L 412.70 236.40 L 412.80 235.50 L 412.20 234.00 L 410.70 233.40 Z\" fill=\"#4e3ccb\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"67\" stroke=\"none\" target-height=\"4.300003\" target-width=\"21.5\" target-x=\"391.3\" target-y=\"233.4\"></path><path d=\"M 410.70 242.00 L 392.60 242.20 L 391.40 243.30 L 391.30 244.20 L 391.90 245.70 L 393.40 246.30 L 411.50 246.20 L 412.70 245.00 L 412.80 244.20 L 412.20 242.70 L 410.70 242.00 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Path\" node-id=\"68\" stroke=\"none\" target-height=\"4.300003\" target-width=\"21.5\" target-x=\"391.3\" target-y=\"242\"></path><path d=\"M 442.10 114.40 L 436.70 114.40 L 436.70 116.20 L 442.10 116.20 L 442.10 114.40 Z M 431.30 114.40 L 425.90 114.40 L 425.90 116.20 L 431.30 116.20 L 431.30 114.40 Z M 420.50 114.40 L 415.10 114.40 L 415.10 116.20 L 420.50 116.20 L 420.50 114.40 Z M 409.70 114.40 L 404.30 114.40 L 404.30 116.20 L 409.70 116.20 L 409.70 114.40 Z M 398.90 114.40 L 393.50 114.40 L 393.50 116.20 L 398.90 116.20 L 398.90 114.40 Z M 388.10 114.40 L 382.70 114.40 L 382.70 116.20 L 388.10 116.20 L 388.10 114.40 Z M 377.30 114.40 L 371.90 114.40 L 371.90 116.20 L 377.30 116.20 L 377.30 114.40 Z M 366.50 114.40 L 361.10 114.40 L 361.10 116.20 L 366.50 116.20 L 366.50 114.40 Z M 356.40 116.30 L 355.90 117.70 L 355.90 121.60 L 357.70 121.60 L 357.70 118.20 L 357.90 117.20 L 356.40 116.30 Z M 357.70 127.00 L 355.90 127.00 L 355.90 132.40 L 357.70 132.40 L 357.70 127.00 Z M 357.70 137.80 L 355.90 137.80 L 355.90 143.20 L 357.70 143.20 L 357.70 137.80 Z M 357.70 148.60 L 355.90 148.60 L 355.90 154.00 L 357.70 154.00 L 357.70 148.60 Z M 358.50 157.30 L 357.50 158.80 L 358.30 159.20 L 362.80 159.40 L 362.80 157.60 L 359.60 157.60 L 358.50 157.30 Z M 373.60 157.70 L 368.20 157.70 L 368.20 159.50 L 373.60 159.50 L 373.60 157.70 Z M 384.40 157.70 L 379.00 157.70 L 379.00 159.50 L 384.40 159.50 L 384.40 157.70 Z M 395.20 157.70 L 389.80 157.70 L 389.80 159.50 L 395.20 159.50 L 395.20 157.70 Z M 406.00 157.70 L 400.60 157.70 L 400.60 159.50 L 406.00 159.50 L 406.00 157.70 Z M 416.80 157.70 L 411.40 157.70 L 411.40 159.50 L 416.80 159.50 L 416.80 157.70 Z M 427.60 157.70 L 422.20 157.70 L 422.20 159.50 L 427.60 159.50 L 427.60 157.70 Z M 438.40 157.70 L 433.00 157.70 L 433.00 159.50 L 438.40 159.50 L 438.40 157.70 Z M 445.90 154.50 L 444.10 154.50 L 443.80 156.70 L 443.00 157.50 L 443.80 159.10 L 445.50 157.40 L 445.90 154.50 Z M 445.90 143.70 L 444.10 143.70 L 444.10 149.10 L 445.90 149.10 L 445.90 143.70 Z M 445.90 132.80 L 444.10 132.80 L 444.10 138.30 L 445.90 138.30 L 445.90 132.80 Z M 445.90 122.00 L 444.10 122.00 L 444.10 127.40 L 445.90 127.40 L 445.90 122.00 Z M 442.10 114.40 L 442.10 116.20 L 443.20 116.50 L 443.90 117.40 L 445.60 116.70 L 445.10 115.90 L 443.60 114.70 L 442.10 114.40 Z\" fill=\"#c3d3f3\" fill-rule=\"nonzero\" group-id=\"5\" id=\"Shape\" node-id=\"69\" stroke=\"none\" target-height=\"45.1\" target-width=\"90\" target-x=\"355.9\" target-y=\"114.4\"></path></g><g node-id=\"138\"><path d=\"M 505.30 89.60 L 505.10 93.00 L 504.40 96.20 L 503.30 99.30 L 501.90 102.10 L 500.10 104.80 L 498.00 107.10 L 495.70 109.20 L 493.00 111.00 L 490.20 112.50 L 487.10 113.50 L 483.90 114.20 L 480.50 114.40 L 477.10 114.20 L 473.90 113.50 L 470.90 112.50 L 468.00 111.00 L 465.40 109.20 L 463.00 107.10 L 460.90 104.80 L 459.20 102.10 L 457.70 99.30 L 456.70 96.20 L 456.00 93.00 L 455.80 89.60 L 456.00 86.20 L 456.70 83.00 L 457.70 80.00 L 459.20 77.10 L 460.90 74.50 L 463.00 72.10 L 465.40 70.00 L 468.00 68.20 L 470.90 66.80 L 473.90 65.70 L 477.10 65.10 L 480.50 64.80 L 483.90 65.10 L 487.10 65.70 L 490.20 66.80 L 493.00 68.20 L 495.70 70.00 L 498.00 72.10 L 500.10 74.50 L 501.90 77.10 L 503.30 80.00 L 504.40 83.00 L 505.10 86.20 L 505.30 89.60 Z\" fill=\"#ffe8aa\" fill-rule=\"nonzero\" group-id=\"6\" id=\"Oval\" node-id=\"71\" stroke=\"none\" target-height=\"49.6\" target-width=\"49.5\" target-x=\"455.8\" target-y=\"64.8\"></path><path d=\"M 499.80 89.60 L 499.50 93.10 L 498.60 96.40 L 497.20 99.30 L 495.20 102.10 L 493.00 104.30 L 490.30 106.30 L 487.30 107.70 L 484.00 108.60 L 480.50 108.90 L 477.00 108.60 L 473.80 107.70 L 470.80 106.30 L 468.10 104.30 L 465.80 102.10 L 463.90 99.30 L 462.50 96.40 L 461.60 93.10 L 461.30 89.60 L 461.60 86.10 L 462.50 82.90 L 463.90 79.90 L 465.80 77.20 L 468.10 74.90 L 470.80 73.00 L 473.80 71.60 L 477.00 70.70 L 480.50 70.40 L 484.00 70.70 L 487.30 71.60 L 490.30 73.00 L 493.00 74.90 L 495.20 77.20 L 497.20 79.90 L 498.60 82.90 L 499.50 86.10 L 499.80 89.60 Z\" fill=\"#ffe18d\" fill-rule=\"nonzero\" group-id=\"6\" id=\"Oval\" node-id=\"72\" stroke=\"none\" target-height=\"38.5\" target-width=\"38.5\" target-x=\"461.3\" target-y=\"70.4\"></path><path d=\"M 494.30 89.60 L 494.10 92.10 L 493.40 94.40 L 492.40 96.60 L 491.00 98.50 L 487.50 101.50 L 485.30 102.50 L 483.00 103.20 L 480.50 103.40 L 478.00 103.20 L 475.70 102.50 L 473.60 101.50 L 471.70 100.10 L 468.70 96.60 L 467.60 94.40 L 467.00 92.10 L 466.80 89.60 L 467.00 87.10 L 467.60 84.80 L 468.70 82.70 L 470.00 80.70 L 473.60 77.70 L 475.70 76.70 L 478.00 76.10 L 480.50 75.90 L 483.00 76.10 L 485.30 76.70 L 487.50 77.70 L 491.00 80.70 L 492.40 82.70 L 493.40 84.80 L 494.10 87.10 L 494.30 89.60 Z\" fill=\"#ffcb01\" fill-rule=\"nonzero\" group-id=\"6\" id=\"Oval\" node-id=\"73\" stroke=\"none\" target-height=\"27.5\" target-width=\"27.5\" target-x=\"466.8\" target-y=\"75.9\"></path><path d=\"M 479.10 95.10 L 478.10 94.60 L 473.90 89.80 L 473.70 89.30 L 473.70 88.30 L 474.60 87.60 L 475.60 87.70 L 479.20 91.70 L 487.00 84.20 L 488.00 84.20 L 488.40 84.50 L 488.80 85.50 L 488.40 86.50 L 480.10 94.70 L 479.10 95.10 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"6\" id=\"Path\" node-id=\"74\" stroke=\"none\" target-height=\"10.900002\" target-width=\"15.099976\" target-x=\"473.7\" target-y=\"84.2\"></path></g><g node-id=\"139\"><path d=\"M 472.20 226.80 L 471.50 229.30 L 471.60 232.50 L 469.90 237.40 L 470.00 237.90 L 472.30 240.00 L 472.70 243.40 L 473.60 245.00 L 474.60 245.60 L 478.80 246.40 L 479.80 246.80 L 480.10 247.30 L 477.50 254.60 L 491.80 254.00 L 490.40 245.70 L 490.90 238.50 L 490.80 233.00 L 490.40 230.20 L 489.10 226.60 L 487.30 225.20 L 485.50 224.80 L 478.70 224.40 L 474.60 225.10 L 473.10 225.90 L 472.20 226.80 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"76\" stroke=\"none\" target-height=\"30.200012\" target-width=\"21.899994\" target-x=\"469.9\" target-y=\"224.4\"></path><path d=\"M 503.00 324.80 L 508.00 319.20 L 511.10 317.10 L 512.30 317.00 L 516.00 320.70 L 516.30 321.30 L 515.50 322.50 L 518.10 323.10 L 519.70 324.00 L 529.50 333.90 L 529.60 335.00 L 529.10 335.80 L 527.70 336.20 L 525.20 335.40 L 517.60 331.50 L 513.30 330.90 L 509.40 331.20 L 503.00 324.80 Z\" fill=\"#0b224e\" fill-rule=\"evenodd\" group-id=\"7\" id=\"Path\" node-id=\"77\" stroke=\"none\" target-height=\"19.200012\" target-width=\"26.599976\" target-x=\"503\" target-y=\"317\"></path><path d=\"M 469.50 309.20 L 459.60 311.50 L 452.30 313.60 L 445.90 315.90 L 441.50 317.80 L 437.90 320.00 L 435.70 321.70 L 434.00 323.60 L 432.80 326.60 L 432.90 329.60 L 433.40 331.00 L 435.20 333.10 L 439.00 334.70 L 441.50 335.10 L 449.80 335.30 L 458.20 334.90 L 476.70 333.00 L 469.50 309.20 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"78\" stroke=\"none\" target-height=\"26.099976\" target-width=\"43.900024\" target-x=\"432.8\" target-y=\"309.2\"></path><path d=\"M 508.30 317.00 L 506.10 316.60 L 500.40 317.00 L 502.00 314.90 L 503.60 310.70 L 504.00 307.50 L 503.70 304.50 L 503.30 303.60 L 502.50 303.00 L 501.10 302.70 L 498.80 302.80 L 480.80 306.10 L 468.00 307.90 L 461.40 309.50 L 457.10 310.90 L 449.40 314.30 L 445.80 316.40 L 442.90 318.50 L 439.10 322.60 L 437.40 326.30 L 437.20 328.20 L 437.40 330.20 L 437.90 331.70 L 438.80 332.90 L 441.40 334.80 L 443.20 335.40 L 449.80 336.40 L 457.90 336.90 L 475.60 336.40 L 496.80 334.90 L 508.30 333.50 L 509.10 332.40 L 509.40 328.70 L 508.30 317.00 Z\" fill=\"#102b5e\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"79\" stroke=\"none\" target-height=\"34.19998\" target-width=\"72.19998\" target-x=\"437.2\" target-y=\"302.7\"></path><path d=\"M 448.10 255.60 L 447.00 253.30 L 446.50 247.80 L 446.00 246.00 L 445.20 244.30 L 444.30 243.30 L 442.80 242.50 L 439.20 241.80 L 436.00 241.90 L 434.60 242.40 L 434.80 243.00 L 435.50 243.40 L 438.70 244.40 L 440.70 245.90 L 441.40 247.30 L 441.40 248.20 L 441.00 248.90 L 440.10 249.30 L 439.60 248.80 L 437.70 245.70 L 437.20 245.50 L 436.90 245.80 L 436.50 248.50 L 436.60 250.20 L 437.10 251.80 L 438.00 253.10 L 442.50 257.70 L 444.70 261.20 L 445.40 261.10 L 446.10 260.60 L 447.50 258.60 L 448.20 256.40 L 448.10 255.60 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"80\" stroke=\"none\" target-height=\"19.40001\" target-width=\"13.600006\" target-x=\"434.6\" target-y=\"241.8\"></path><path d=\"M 480.30 253.30 L 472.10 262.70 L 467.80 269.10 L 466.50 272.10 L 457.10 260.90 L 453.30 256.60 L 451.40 254.90 L 446.90 258.30 L 444.40 260.80 L 443.50 262.70 L 452.10 277.90 L 455.80 283.60 L 458.40 286.40 L 461.70 287.20 L 466.50 287.30 L 474.00 286.40 L 475.70 283.50 L 476.80 280.60 L 480.00 268.20 L 481.00 259.80 L 481.00 257.10 L 480.30 253.30 Z\" fill=\"#1eaf69\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"81\" stroke=\"none\" target-height=\"33.999985\" target-width=\"37.5\" target-x=\"443.5\" target-y=\"253.3\"></path><path d=\"M 498.10 256.70 L 499.80 257.10 L 500.70 257.80 L 501.90 259.50 L 503.10 261.90 L 506.00 271.50 L 509.80 290.30 L 510.70 297.60 L 510.70 303.80 L 509.50 307.20 L 508.50 308.40 L 507.10 309.40 L 505.30 310.00 L 502.90 310.30 L 498.20 310.20 L 493.90 309.70 L 479.40 306.90 L 478.80 306.60 L 478.30 305.80 L 478.10 304.00 L 478.30 301.10 L 479.20 296.80 L 481.90 287.00 L 485.80 276.30 L 490.20 266.50 L 492.50 262.40 L 496.00 257.70 L 498.10 256.70 Z\" fill=\"#1eaf69\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"82\" stroke=\"none\" target-height=\"53.599976\" target-width=\"32.600006\" target-x=\"478.1\" target-y=\"256.7\"></path><path d=\"M 491.40 245.60 L 492.10 245.60 L 492.60 246.00 L 494.40 249.00 L 476.40 258.00 L 477.10 253.30 L 477.60 252.20 L 478.50 251.50 L 491.40 245.60 Z\" fill=\"#60dfa0\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"83\" stroke=\"none\" target-height=\"12.399994\" target-width=\"18\" target-x=\"476.4\" target-y=\"245.6\"></path><path d=\"M 484.50 235.40 L 484.00 235.40 L 483.80 234.80 L 484.40 230.60 L 484.30 229.70 L 483.80 229.10 L 476.40 228.60 L 474.10 228.20 L 472.20 227.40 L 471.20 226.50 L 470.60 225.30 L 470.30 223.70 L 470.90 220.40 L 473.10 217.50 L 476.80 215.20 L 480.60 214.20 L 485.40 214.30 L 487.60 214.60 L 492.50 216.20 L 494.80 217.60 L 497.40 220.10 L 498.50 221.80 L 499.80 225.90 L 500.00 228.50 L 499.30 234.50 L 497.50 238.50 L 495.30 241.00 L 493.40 242.20 L 491.80 242.70 L 490.40 242.70 L 489.80 242.40 L 489.70 241.70 L 490.10 237.50 L 489.50 235.90 L 488.00 235.10 L 484.50 235.40 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"84\" stroke=\"none\" target-height=\"28.5\" target-width=\"29.700012\" target-x=\"470.3\" target-y=\"214.2\"></path><path d=\"M 467.90 299.40 L 464.60 301.10 L 462.70 302.40 L 459.40 305.70 L 458.10 308.30 L 458.60 309.90 L 459.40 310.30 L 460.50 310.20 L 465.60 307.70 L 467.80 306.90 L 472.80 307.00 L 474.50 306.20 L 474.70 305.50 L 474.50 304.30 L 473.10 301.70 L 471.10 299.50 L 470.10 298.90 L 469.50 298.80 L 467.90 299.40 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"85\" stroke=\"none\" target-height=\"11.5\" target-width=\"16.600006\" target-x=\"458.1\" target-y=\"298.8\"></path><path d=\"M 504.00 263.80 L 502.20 260.00 L 498.00 253.20 L 496.20 250.80 L 493.80 248.50 L 483.40 252.70 L 479.30 254.70 L 477.10 256.40 L 474.00 262.90 L 472.30 269.10 L 472.20 271.90 L 472.80 295.10 L 467.50 296.50 L 467.30 297.00 L 467.70 298.70 L 469.50 302.90 L 471.90 307.10 L 473.70 309.10 L 482.40 308.60 L 493.50 306.70 L 500.30 304.40 L 502.70 303.00 L 504.10 301.90 L 505.00 300.70 L 505.40 299.40 L 506.30 291.60 L 506.60 281.90 L 506.00 272.00 L 505.20 267.50 L 504.00 263.80 Z\" fill=\"#2ccd7f\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"86\" stroke=\"none\" target-height=\"60.600006\" target-width=\"39.30002\" target-x=\"467.3\" target-y=\"248.5\"></path><path d=\"M 488.40 279.20 L 489.00 292.50 L 472.80 295.10 L 476.60 293.40 L 479.00 291.70 L 482.00 288.80 L 483.40 286.70 L 484.20 284.90 L 486.90 274.20 L 488.10 271.70 L 490.30 268.80 L 491.80 267.60 L 489.00 275.30 L 488.40 279.20 Z\" fill=\"#1eaf69\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"87\" stroke=\"none\" target-height=\"27.5\" target-width=\"19\" target-x=\"472.8\" target-y=\"267.6\"></path><path d=\"M 505.60 316.60 L 501.80 320.40 L 498.90 322.70 L 492.00 326.70 L 484.60 329.50 L 480.50 330.60 L 470.40 331.90 L 466.80 331.80 L 462.70 331.10 L 461.20 330.20 L 461.00 329.50 L 475.00 328.00 L 485.50 325.60 L 493.00 322.60 L 496.20 320.80 L 500.40 317.00 L 505.60 316.60 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"88\" stroke=\"none\" target-height=\"15.299988\" target-width=\"44.600006\" target-x=\"461\" target-y=\"316.6\"></path><path d=\"M 482.20 245.60 L 481.10 247.90 L 479.50 249.50 L 480.10 247.30 L 479.80 246.80 L 476.60 246.00 L 479.00 246.10 L 482.20 245.60 Z\" fill=\"#cd916a\" fill-rule=\"nonzero\" group-id=\"7\" id=\"Path\" node-id=\"89\" stroke=\"none\" target-height=\"3.899994\" target-width=\"5.600006\" target-x=\"476.6\" target-y=\"245.6\"></path></g><g node-id=\"140\"><path d=\"M 96.00 234.50 L 95.80 250.50 L 96.40 255.00 L 98.30 262.40 L 98.70 267.30 L 79.20 269.20 L 69.50 269.40 L 65.10 269.10 L 61.70 268.50 L 61.40 268.00 L 60.40 261.00 L 59.80 247.80 L 60.60 234.50 L 52.80 234.50 L 51.80 234.00 L 51.40 233.00 L 52.10 225.70 L 53.80 218.80 L 55.10 215.20 L 57.00 211.70 L 59.10 208.90 L 61.30 206.80 L 63.90 205.10 L 66.50 203.80 L 69.30 202.90 L 73.60 202.20 L 77.80 201.90 L 82.20 202.10 L 85.90 202.90 L 89.20 204.10 L 92.20 205.80 L 94.80 207.70 L 97.10 210.00 L 100.80 215.20 L 103.90 222.10 L 105.10 225.90 L 106.60 234.50 L 96.00 234.50 Z\" fill=\"#1b90fb\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"91\" stroke=\"none\" target-height=\"67.5\" target-width=\"55.199997\" target-x=\"51.4\" target-y=\"201.9\"></path><path d=\"M 94.70 241.00 L 94.40 230.80 L 93.50 223.80 L 90.60 245.60 L 94.70 241.00 Z\" fill=\"#1277d7\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"92\" stroke=\"none\" target-height=\"21.800003\" target-width=\"4.0999985\" target-x=\"90.6\" target-y=\"223.8\"></path><path d=\"M 63.30 234.50 L 64.90 227.20 L 66.40 233.80 L 66.80 236.70 L 66.90 240.00 L 66.70 242.20 L 66.20 243.40 L 65.40 244.20 L 63.60 244.60 L 62.20 244.20 L 63.30 234.50 Z\" fill=\"#1277d7\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"93\" stroke=\"none\" target-height=\"17.40001\" target-width=\"4.700001\" target-x=\"62.2\" target-y=\"227.2\"></path><path d=\"M 90.60 234.80 L 93.40 242.40 L 96.40 249.20 L 100.00 255.80 L 102.00 258.50 L 103.90 260.30 L 105.20 261.10 L 106.40 261.30 L 107.50 261.00 L 108.30 260.40 L 108.80 259.20 L 109.20 254.40 L 108.90 250.70 L 107.70 243.20 L 105.70 234.50 L 90.60 234.80 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"94\" stroke=\"none\" target-height=\"26.799988\" target-width=\"18.599998\" target-x=\"90.6\" target-y=\"234.5\"></path><path d=\"M 55.50 338.80 L 51.10 348.00 L 58.90 351.70 L 64.60 343.10 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"95\" stroke=\"none\" target-height=\"12.900024\" target-width=\"13.5\" target-x=\"51.1\" target-y=\"338.8\"></path><path d=\"M 109.20 345.80 L 109.40 353.60 L 100.20 355.30 L 99.30 345.80 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"96\" stroke=\"none\" target-height=\"9.5\" target-width=\"10.099998\" target-x=\"99.3\" target-y=\"345.8\"></path><path d=\"M 74.80 283.00 L 92.90 313.50 L 98.20 346.00 L 99.10 346.80 L 99.80 346.90 L 111.20 346.90 L 112.60 346.30 L 113.10 344.70 L 104.70 289.30 L 102.00 278.70 L 99.80 273.00 L 96.50 266.20 L 75.50 269.10 L 74.80 283.00 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"97\" stroke=\"none\" target-height=\"80.69998\" target-width=\"38.299995\" target-x=\"74.8\" target-y=\"266.2\"></path><path d=\"M 88.40 266.60 L 84.90 296.80 L 83.60 304.60 L 82.90 307.30 L 77.40 320.40 L 72.60 330.20 L 65.30 344.20 L 64.10 345.00 L 53.10 341.00 L 52.50 340.60 L 52.00 339.60 L 62.40 309.30 L 62.90 293.90 L 62.80 277.20 L 64.20 271.60 L 65.20 269.20 L 68.00 264.50 L 88.40 266.60 Z\" fill=\"#102b5e\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"98\" stroke=\"none\" target-height=\"80.5\" target-width=\"36.4\" target-x=\"52\" target-y=\"264.5\"></path><path d=\"M 124.20 275.10 L 47.10 275.10 L 44.90 274.50 L 43.30 272.90 L 42.60 270.60 L 42.60 239.00 L 42.80 237.80 L 44.00 235.80 L 45.90 234.60 L 47.10 234.50 L 124.20 234.50 L 126.40 235.10 L 128.10 236.70 L 128.70 239.00 L 128.70 270.60 L 128.50 271.90 L 127.30 273.80 L 125.40 275.00 L 124.20 275.10 Z\" fill=\"#8484ef\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"99\" stroke=\"none\" target-height=\"40.600006\" target-width=\"86.1\" target-x=\"42.6\" target-y=\"234.5\"></path><path d=\"M 93.60 233.00 L 93.90 235.50 L 94.40 236.20 L 96.20 237.00 L 102.70 236.90 L 107.00 236.20 L 108.30 235.20 L 108.50 234.30 L 108.50 232.80 L 107.90 231.20 L 106.80 229.60 L 105.30 228.30 L 102.80 227.30 L 101.20 227.20 L 98.30 227.70 L 96.40 228.40 L 95.00 229.30 L 94.10 230.40 L 93.60 233.00 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"100\" stroke=\"none\" target-height=\"9.800003\" target-width=\"14.900002\" target-x=\"93.6\" target-y=\"227.2\"></path><path d=\"M 99.70 350.40 L 98.90 350.70 L 97.70 352.50 L 97.00 356.60 L 97.10 359.30 L 98.50 360.50 L 101.10 361.20 L 107.00 361.50 L 111.60 362.70 L 113.50 362.70 L 118.00 362.10 L 120.20 361.50 L 122.90 359.90 L 123.60 358.50 L 123.40 357.50 L 122.10 356.30 L 115.20 354.40 L 114.00 353.50 L 111.30 349.80 L 110.40 348.90 L 109.60 348.60 L 108.70 348.90 L 104.50 352.80 L 103.40 353.10 L 101.70 352.40 L 100.10 350.60 L 99.70 350.40 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"101\" stroke=\"none\" target-height=\"14.100006\" target-width=\"26.599998\" target-x=\"97\" target-y=\"348.6\"></path><path d=\"M 53.30 343.40 L 52.50 343.30 L 50.60 344.50 L 48.10 347.70 L 46.90 350.20 L 47.60 351.90 L 49.70 353.70 L 54.70 356.60 L 58.20 359.80 L 60.00 360.80 L 64.20 362.30 L 66.50 362.70 L 69.60 362.50 L 70.90 361.60 L 71.20 360.70 L 70.50 359.00 L 65.30 354.10 L 64.60 352.70 L 63.90 348.20 L 63.50 347.00 L 62.90 346.40 L 62.00 346.30 L 56.40 347.70 L 55.30 347.50 L 54.10 346.10 L 53.60 343.80 L 53.30 343.40 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"102\" stroke=\"none\" target-height=\"19.400024\" target-width=\"24.299995\" target-x=\"46.9\" target-y=\"343.3\"></path><g node-id=\"143\"><path d=\"M 89.80 179.00 L 90.50 181.40 L 90.50 184.40 L 92.10 189.20 L 91.90 189.70 L 89.80 191.80 L 89.30 195.00 L 88.40 196.60 L 87.50 197.10 L 83.50 197.90 L 82.50 198.30 L 82.20 198.80 L 84.70 205.90 L 84.40 206.90 L 83.80 207.70 L 81.50 209.20 L 77.70 209.70 L 75.30 209.50 L 73.70 209.00 L 71.70 207.50 L 70.90 205.20 L 72.20 197.20 L 71.70 190.20 L 71.80 184.90 L 72.20 182.30 L 73.50 178.80 L 75.20 177.40 L 77.00 177.00 L 83.60 176.60 L 87.50 177.30 L 88.90 178.00 L 89.80 179.00 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8,11\" id=\"Path\" node-id=\"104\" stroke=\"none\" target-height=\"33.09999\" target-width=\"21.199997\" target-x=\"70.9\" target-y=\"176.6\"></path><path d=\"M 82.20 198.80 L 82.50 200.10 L 81.20 198.40 L 80.70 196.10 L 84.00 197.20 L 87.60 197.10 L 83.10 198.00 L 82.40 198.30 L 82.20 198.80 Z\" fill=\"#cd916a\" fill-rule=\"nonzero\" group-id=\"8,11\" id=\"Path\" node-id=\"105\" stroke=\"none\" target-height=\"4\" target-width=\"6.9000015\" target-x=\"80.7\" target-y=\"196.1\"></path></g><path d=\"M 84.90 165.60 L 88.80 168.10 L 91.50 170.80 L 92.40 172.40 L 92.70 174.00 L 92.10 177.40 L 90.80 179.10 L 89.70 179.80 L 86.60 180.70 L 84.20 180.80 L 82.80 181.40 L 82.00 183.50 L 81.60 189.40 L 80.90 189.10 L 77.20 185.10 L 76.30 184.80 L 75.70 185.10 L 75.00 187.80 L 74.40 196.30 L 73.60 199.00 L 73.00 199.30 L 71.80 199.20 L 68.70 197.70 L 65.90 194.80 L 64.50 192.70 L 63.60 190.40 L 63.00 187.70 L 62.70 184.50 L 62.90 181.30 L 63.60 178.70 L 64.50 176.60 L 65.80 174.70 L 68.80 172.00 L 71.30 170.60 L 73.80 169.80 L 79.60 168.80 L 82.80 167.20 L 84.90 165.60 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"106\" stroke=\"none\" target-height=\"33.699997\" target-width=\"29.999996\" target-x=\"62.7\" target-y=\"165.6\"></path><path d=\"M 114.50 245.90 L 121.70 245.90 L 121.70 249.50 L 114.50 249.50 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"107\" stroke=\"none\" target-height=\"3.600006\" target-width=\"7.199997\" target-x=\"114.5\" target-y=\"245.9\"></path><path d=\"M 114.50 249.50 L 121.70 249.50 L 121.70 263.90 L 114.50 263.90 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"108\" stroke=\"none\" target-height=\"14.399994\" target-width=\"7.199997\" target-x=\"114.5\" target-y=\"249.5\"></path><path d=\"M 103.70 245.90 L 110.90 245.90 L 110.90 253.10 L 103.70 253.10 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"109\" stroke=\"none\" target-height=\"7.200012\" target-width=\"7.2000046\" target-x=\"103.7\" target-y=\"245.9\"></path><path d=\"M 103.70 253.10 L 110.90 253.10 L 110.90 263.90 L 103.70 263.90 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"110\" stroke=\"none\" target-height=\"10.799988\" target-width=\"7.2000046\" target-x=\"103.7\" target-y=\"253.1\"></path><path d=\"M 92.90 245.90 L 100.10 245.90 L 100.10 260.30 L 92.90 260.30 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"111\" stroke=\"none\" target-height=\"14.399994\" target-width=\"7.199997\" target-x=\"92.9\" target-y=\"245.9\"></path><path d=\"M 92.90 260.30 L 100.10 260.30 L 100.10 263.90 L 92.90 263.90 Z\" fill=\"#7266d5\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Rectangle\" node-id=\"112\" stroke=\"none\" target-height=\"3.600006\" target-width=\"7.199997\" target-x=\"92.9\" target-y=\"260.3\"></path><path d=\"M 70.90 260.30 L 50.20 260.30 L 49.70 259.80 L 49.80 256.80 L 70.90 256.70 L 71.30 257.10 L 71.30 259.80 L 70.90 260.30 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"113\" stroke=\"none\" target-height=\"3.5999756\" target-width=\"21.600002\" target-x=\"49.7\" target-y=\"256.7\"></path><path d=\"M 60.10 253.10 L 50.20 253.10 L 49.70 252.60 L 49.80 249.60 L 60.10 249.50 L 60.50 249.90 L 60.50 252.60 L 60.10 253.10 Z\" fill=\"#ffffff\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"114\" stroke=\"none\" target-height=\"3.600006\" target-width=\"10.799999\" target-x=\"49.7\" target-y=\"249.5\"></path><path d=\"M 69.50 272.10 L 69.10 270.60 L 68.30 269.20 L 66.20 266.90 L 64.30 265.60 L 62.80 257.40 L 61.90 248.60 L 62.60 239.30 L 63.30 234.50 L 52.90 234.50 L 52.70 238.20 L 52.90 249.90 L 57.10 267.00 L 55.80 272.50 L 55.80 275.10 L 56.30 276.20 L 57.30 277.10 L 60.30 278.50 L 65.80 279.80 L 66.80 279.60 L 67.70 278.70 L 68.50 277.40 L 69.00 275.70 L 69.50 272.10 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"8\" id=\"Path\" node-id=\"115\" stroke=\"none\" target-height=\"45.299988\" target-width=\"16.8\" target-x=\"52.7\" target-y=\"234.5\"></path></g><g node-id=\"141\"><path d=\"M 228.40 353.20 L 228.10 360.90 L 234.20 366.40 L 235.90 367.70 L 236.20 367.60 L 235.00 365.00 L 234.40 360.90 L 235.00 354.10 L 228.40 353.20 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"117\" stroke=\"none\" target-height=\"14.5\" target-width=\"8.099991\" target-x=\"228.1\" target-y=\"353.2\"></path><path d=\"M 262.80 354.10 L 263.70 361.90 L 270.40 366.40 L 272.40 367.40 L 272.60 367.30 L 271.10 364.90 L 269.90 361.00 L 269.50 354.10 L 262.80 354.10 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"118\" stroke=\"none\" target-height=\"13.299988\" target-width=\"9.800018\" target-x=\"262.8\" target-y=\"354.1\"></path><path d=\"M 253.10 174.50 L 254.30 175.00 L 255.20 176.00 L 257.00 179.70 L 259.20 182.40 L 260.20 184.10 L 258.30 186.90 L 258.80 190.50 L 258.40 193.00 L 257.50 193.90 L 254.50 195.70 L 253.80 196.80 L 253.60 199.50 L 254.00 202.70 L 254.10 206.00 L 253.60 206.70 L 252.00 207.00 L 247.30 206.20 L 244.00 204.90 L 242.80 203.60 L 242.60 201.00 L 244.60 191.70 L 244.20 188.90 L 240.90 180.50 L 240.80 179.00 L 241.70 177.40 L 245.60 175.40 L 249.40 174.40 L 253.10 174.50 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"119\" stroke=\"none\" target-height=\"32.600006\" target-width=\"19.40001\" target-x=\"240.8\" target-y=\"174.4\"></path><path d=\"M 276.00 164.00 L 274.20 161.00 L 273.90 158.00 L 274.40 156.00 L 274.80 155.60 L 275.20 155.90 L 275.80 157.80 L 276.50 157.90 L 277.10 157.30 L 277.60 155.70 L 277.60 153.70 L 277.00 149.80 L 277.40 149.50 L 278.00 149.60 L 278.80 150.20 L 279.50 151.30 L 280.20 154.00 L 281.80 155.80 L 282.20 156.70 L 282.50 160.40 L 281.90 163.70 L 280.80 166.60 L 280.20 167.00 L 279.30 167.20 L 277.40 166.00 L 276.00 164.00 Z\" fill=\"#f1b282\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"120\" stroke=\"none\" target-height=\"17.699997\" target-width=\"8.600006\" target-x=\"273.9\" target-y=\"149.5\"></path><path d=\"M 229.00 261.00 L 227.20 266.90 L 226.40 275.90 L 226.40 281.70 L 227.30 292.80 L 229.70 307.90 L 228.20 315.30 L 227.50 325.20 L 227.30 335.90 L 227.80 355.60 L 235.00 355.40 L 239.40 334.50 L 243.10 313.70 L 243.60 309.70 L 244.60 291.90 L 247.30 261.80 L 242.00 258.80 L 239.70 257.80 L 235.50 257.00 L 232.50 257.40 L 231.10 258.10 L 230.00 259.30 L 229.00 261.00 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"121\" stroke=\"none\" target-height=\"98.600006\" target-width=\"20.90001\" target-x=\"226.4\" target-y=\"257\"></path><path d=\"M 241.10 259.70 L 240.20 261.90 L 239.80 266.30 L 240.00 274.20 L 240.50 277.40 L 242.80 284.00 L 245.30 288.80 L 255.10 304.80 L 256.70 309.30 L 256.80 315.20 L 257.80 327.90 L 260.60 344.90 L 262.90 355.70 L 269.90 355.40 L 271.10 331.50 L 271.40 319.10 L 271.10 308.40 L 270.00 299.30 L 268.20 288.50 L 261.90 258.70 L 255.80 258.20 L 247.40 258.20 L 242.60 259.00 L 241.10 259.70 Z\" fill=\"#102b5e\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"122\" stroke=\"none\" target-height=\"97.5\" target-width=\"31.59999\" target-x=\"239.8\" target-y=\"258.2\"></path><path d=\"M 282.30 164.80 L 280.90 164.30 L 278.60 164.30 L 276.40 165.00 L 275.80 165.80 L 275.30 168.10 L 273.80 182.00 L 272.60 188.70 L 271.60 191.00 L 270.40 193.20 L 268.70 195.10 L 265.80 197.50 L 262.70 199.40 L 256.90 201.70 L 254.50 202.00 L 252.90 201.80 L 248.20 200.00 L 246.00 199.80 L 235.30 201.80 L 231.30 202.80 L 230.10 203.50 L 227.80 205.50 L 222.90 211.30 L 217.70 218.50 L 213.70 225.90 L 212.70 228.30 L 212.00 232.00 L 212.20 234.20 L 213.20 237.00 L 216.40 242.90 L 220.50 248.80 L 227.40 257.30 L 226.20 260.00 L 226.00 261.00 L 226.30 261.50 L 228.90 263.20 L 231.80 264.60 L 235.00 265.50 L 240.10 266.30 L 245.20 266.60 L 255.00 265.70 L 262.40 264.00 L 265.60 262.60 L 265.00 259.80 L 262.00 250.50 L 259.90 241.20 L 259.30 235.80 L 259.20 231.40 L 259.60 227.80 L 261.90 226.20 L 263.80 223.70 L 264.50 221.80 L 264.80 219.90 L 264.40 216.30 L 275.20 204.70 L 278.10 200.30 L 279.30 197.60 L 281.10 190.10 L 282.10 181.60 L 282.50 173.50 L 282.30 164.80 Z M 233.60 238.90 L 232.40 245.40 L 230.40 251.10 L 224.70 238.70 L 222.70 233.00 L 231.80 218.30 L 232.90 223.80 L 233.40 228.20 L 233.60 238.90 Z\" fill=\"#1b90fb\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Shape\" node-id=\"123\" stroke=\"none\" target-height=\"102.3\" target-width=\"70.5\" target-x=\"212\" target-y=\"164.3\"></path><path d=\"M 277.30 370.90 L 277.00 372.10 L 276.10 372.30 L 269.00 372.10 L 267.40 371.00 L 266.30 368.00 L 265.40 366.90 L 264.70 367.60 L 264.20 372.30 L 263.00 372.30 L 262.10 367.40 L 261.80 363.00 L 262.40 360.00 L 263.70 358.70 L 265.70 358.70 L 267.10 360.00 L 269.20 363.20 L 270.30 364.30 L 276.40 368.50 L 277.00 369.30 L 277.30 370.90 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"124\" stroke=\"none\" target-height=\"13.599976\" target-width=\"15.5\" target-x=\"261.8\" target-y=\"358.7\"></path><path d=\"M 241.60 371.30 L 241.30 372.40 L 240.30 372.60 L 233.20 372.50 L 231.70 371.30 L 230.60 368.30 L 229.70 367.20 L 229.00 368.00 L 228.40 372.70 L 227.30 372.70 L 226.40 367.70 L 226.10 363.30 L 226.60 360.40 L 228.00 359.00 L 230.00 359.10 L 231.40 360.30 L 233.50 363.60 L 234.60 364.70 L 240.70 368.90 L 241.20 369.60 L 241.60 371.30 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"125\" stroke=\"none\" target-height=\"13.700012\" target-width=\"15.5\" target-x=\"226.1\" target-y=\"359\"></path><path d=\"M 251.80 181.90 L 251.60 180.00 L 252.10 178.90 L 253.50 177.80 L 255.90 176.80 L 256.90 175.30 L 256.60 173.20 L 255.00 170.90 L 251.90 169.10 L 247.50 168.40 L 242.00 169.00 L 239.00 170.20 L 237.50 171.50 L 236.50 172.90 L 234.30 179.40 L 233.20 180.70 L 229.00 183.20 L 227.60 184.40 L 226.50 185.80 L 224.10 192.40 L 222.90 194.50 L 221.30 196.50 L 217.30 200.50 L 216.40 202.20 L 215.50 206.50 L 216.10 211.20 L 218.00 215.80 L 219.50 217.90 L 221.20 219.80 L 223.20 221.40 L 225.50 222.70 L 228.00 223.50 L 230.80 223.90 L 234.00 223.70 L 237.90 222.80 L 241.10 221.40 L 243.80 219.70 L 246.10 217.60 L 247.90 215.40 L 249.40 213.00 L 251.20 207.90 L 251.60 203.10 L 251.50 201.20 L 250.30 197.00 L 250.30 195.50 L 250.70 194.20 L 252.70 191.20 L 253.60 188.10 L 253.70 186.40 L 253.50 184.80 L 252.90 183.30 L 251.80 181.90 Z\" fill=\"#0b224e\" fill-rule=\"nonzero\" group-id=\"9\" id=\"Path\" node-id=\"126\" stroke=\"none\" target-height=\"55.5\" target-width=\"41.399994\" target-x=\"215.5\" target-y=\"168.4\"></path></g></svg>\n</template>\n","<template>\n\n <div class=\"simple-page-layout__warp\">\n\n <div class=\"simple-page-layout__bg\">\n <div class=\"simple-page-layout__bg_title\">\n <template v-if=\"system.logo\">\n <img :src=\"system.logo\"></img>\n </template>\n <template v-else>\n {{system.projectName}}\n </template>\n </div>\n <div class=\"simple-page-layout__bg_body\">\n <TeamImage/>\n </div>\n <div class=\"simple-page-layout__bg_block\"> </div>\n <div class=\"simple-page-layout__bg_block block2\"> </div>\n </div>\n <div class=\"simple-page-layout__main\">\n <div class=\"simple-page-layout__main_body\">\n <slot></slot>\n </div>\n </div>\n\n </div>\n\n</template>\n\n<script setup lang=\"ts\">\nimport { useMSAppClient } from \"../../../composables\";\nimport TeamImage from \"./TeamImage.vue\"\nconst system = useMSAppClient();\n\n</script>\n<style lang=\"scss\" scoped>\n@import \"index\";\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport SimplePageLayout from \"./index.vue\";\n\nexport const MKSimplePageLayout = withInstall(SimplePageLayout);\nexport default MKSimplePageLayout;\n","<template>\n <Transition name=\"slide-fade\">\n <slot></slot>\n </Transition>\n</template>\n<style lang=\"scss\">\n.slide-fade-enter-active {\n transition: all 0.2s ease;\n}\n.slide-fade-leave-active {\n\n}\n.slide-fade-enter-from,\n.slide-fade-leave-to {\n transform: translateY(20px);\n opacity: 0;\n}\n</style>\n","import { withInstall } from \"@maketribe/utils\";\nimport SlideFadeTransition from \"./index.vue\";\n\nexport const MKSlideFadeTransition = withInstall(SlideFadeTransition);\nexport default MKSlideFadeTransition;\n","import { withInstall } from \"@maketribe/utils\";\nimport ListItem from \"./index.vue\";\n\nexport const MKListItem = withInstall(ListItem);\nexport default MKListItem;\n","import {Fragment, ref, h, unref} from \"vue\";\nimport { Dialoger } from \"@maketribe/dm\";\nimport { fileSelect } from \"@maketribe/utils\";\nimport {Share, UploadFilled,Picture,} from \"@element-plus/icons-vue\";\nimport {ElButton, ElImage, ElInput, ElTabPane, ElTabs,ElAlert,ElIcon} from \"element-plus\";\nimport {MKMaterialList} from \"../MaterialList\";\nimport { MKImageCropper } from \"../../basic/ImageCropper\"\nimport { MKSvgIcon } from \"../../basic/SvgIcon\"\nimport { MKAsyncComponentView } from \"../../layouts\"\n\n/**\n * 文件选择配置\n */\nexport type FileSelectOptions = {\n type:'image'|'video'|'doc'|'local-image'|'local-video'|'local',\n hideLocal?:boolean,\n imageOptions?:({cutWidth?:number,cutHeight?: number, isCut?: boolean})\n};\n\n// 选择本地文件\nconst selectLocalFile = async (type:FileSelectOptions[\"type\"]) => {\n return await fileSelect({\n accept:type == \"local\" || type == \"doc\" ? \"*\" :(type.indexOf(\"image\") >=0 ? \"image/*\":\"video/*\")\n });\n}\n\n/**\n * 文件预览显示\n */\nconst FileView = defineComponent({\n props: [\"file\",\"type\"],\n setup(props, {emit}) {\n return () => {\n return props.type == \"image\" ? <ElImage\n style=\"background: #dedede;width: 100%; height: 480px;margin-top:10px;padding:10px;box-sizing: border-box;\"\n src={unref(props.file)} fit=\"contain\" v-slots={{\n error: () => {\n return <div style=\"\n font-size: 50px;\n display: flex;\n align-content: center;\n justify-content: center;\n align-items: center;\n height: 100%;\n \">\n <ElIcon><Picture/></ElIcon>\n </div>\n }\n }}>\n </ElImage>\n :\n (unref(props.file) != \"\" ? <ElAlert class=\"my-2! upload-file-item\" closable={false} v-slots={{\n title:()=> {\n return <div class=\"flex w-full justify-center items-center gap-1 pr-6\">\n <MKSvgIcon name={props.type == \"video\" ? \"ep:film\" : \"ep:document\"} class=\"mr-2\"/>\n <div class=\"w-full\">{unref(props.file)}</div>\n </div>\n }\n }}>\n </ElAlert>: <div></div>);\n }\n }\n})\n\n/**\n * 文件选择\n * @constructor\n */\nexport const MKFileSelect = async function (options: FileSelectOptions): Promise<(File | string | null)> {\n\n return new Promise((resolve, reject) => {\n\n // 本地选择的话\n if (options.type.indexOf(\"local\") >= 0) {\n selectLocalFile(options.type).then(resolve).catch(reject);\n }\n else {\n\n // 文件路径\n const filePath = ref<any>(\"\");\n // 显示的文件信息\n const viewFileInfo = ref<any>(\"\");\n // 显示文件的loading\n const viewFileLoading = ref<any>(false);\n // 文件对象\n let file:File|null = null;\n\n // 显示文件路径\n watch(filePath,()=>{ viewFileInfo.value = filePath.value; })\n\n // 本地选择\n const localSelectHandle = async ()=>{\n\n file = await selectLocalFile(options.type);\n\n viewFileLoading.value = true;\n\n if (file) {\n if(options.type == \"image\"){\n const fileRender = new FileReader();\n fileRender.onload = async (data: any) => {\n filePath.value = data.target.result as string;\n viewFileLoading.value = false;\n }\n fileRender.readAsDataURL(file)\n }\n else{\n viewFileInfo.value = `${file.name} [${Math.round(file.size / 1000 / 10) / 100}MB]`;\n viewFileLoading.value = false;\n }\n }\n }\n\n // 标题\n const title = computed(()=>{\n if(options.type == \"image\") return \"图片选择\"\n if(options.type == \"video\") return \"视频选择\"\n if(options.type == \"doc\") return \"文件选择\"\n })\n\n // 素材库类型\n const allowMaterialTypeValues= computed(()=>{\n if(options.type == \"image\") return [1]\n if(options.type == \"video\") return [2]\n if(options.type == \"doc\") return [1,2,4]\n })\n\n // 是否显示过素材库面板\n const materialPanelVisible = ref(false);\n\n // 取消选择的点击事件处理函数\n const handleCancelClick = () => {\n dialogInstance.destroy();\n file = null;\n };\n\n // 擦切事件的处理函数\n const handleCutClick = async () => {\n\n // 存在图片地址的话\n if (filePath.value && options.imageOptions) {\n\n // 开始裁切\n let result = await MKImageCropper({\n src: filePath.value,\n ratioOptions: options.imageOptions.cutWidth && options.imageOptions.cutHeight ? [\n {\n value: `${options.imageOptions.cutWidth}*${options.imageOptions.cutHeight}`,\n label: `${options.imageOptions.cutWidth}px*${options.imageOptions.cutHeight}px`,\n width: options.imageOptions.cutWidth, height: options.imageOptions.cutHeight\n }\n ] : [],\n maxWidth: options.imageOptions.cutWidth || 0,\n maxHeight: options.imageOptions.cutHeight || 0\n });\n\n // 裁切成功\n if (result.data && result.isConfirm) {\n filePath.value = result.data;\n dialogInstance.destroy();\n resolve(filePath.value);\n }\n }\n else {\n dialogInstance.destroy();\n resolve(filePath.value);\n }\n };\n\n // 素材选择事件处理函数\n const handleMaterialSelect = async (data:any) => {\n filePath.value = data[0]?.path;\n file = null;\n }\n\n // 原图输出\n const handleConfirmClick = async () => {\n dialogInstance.destroy();\n resolve(filePath.value || file);\n file = null;\n };\n\n // 激活的tab\n const activeTabName = ref(options.hideLocal === true ? \"m\" : \"l\");\n\n watch(activeTabName,(v:any)=>{ materialPanelVisible.value = materialPanelVisible.value ? true : v === \"m\" },{ immediate: true });\n\n // 弹窗实例\n const dialogInstance = Dialoger.customRender({\n title: title.value,\n width: \"70%\",\n onClose: () => {\n dialogInstance.destroy();\n },\n body: () => {\n return <ElTabs style=\"min-height: 520px\" v-model={activeTabName.value}>\n {\n options.hideLocal === true ? null :\n <ElTabPane label=\"本地选择\" name=\"l\" >\n <ElButton icon={UploadFilled} type=\"primary\" style=\"width: 100%\" onClick={localSelectHandle}>\n 选择本地文件\n </ElButton>\n <FileView v-loading={unref(viewFileLoading)} file={unref(viewFileInfo)} type={options.type}/>\n </ElTabPane>\n }\n\n <ElTabPane label=\"素材库选择\" name=\"m\">\n {\n unref(materialPanelVisible)?\n <MKAsyncComponentView>\n <MKMaterialList style={{height: \"520px\"}} selectable onSelect={handleMaterialSelect} allowMaterialTypeValues={allowMaterialTypeValues.value}/>\n </MKAsyncComponentView>\n : null\n }\n\n </ElTabPane>\n <ElTabPane label=\"网络路径\" name=\"n\">\n <ElInput v-model={filePath.value} prefix-icon={Share} style=\"width: 100%\" placeholder=\"请输入链接地址\">\n </ElInput>\n <FileView v-loading={unref(viewFileLoading)} file={unref(viewFileInfo)} type={options.type} />\n </ElTabPane>\n </ElTabs>\n },\n footer: () => {\n return (\n <Fragment>\n <ElButton onClick={handleCancelClick}>取消</ElButton>\n {options.type == \"image\" ? <ElButton type=\"primary\" onClick={handleCutClick}>\n 裁切\n </ElButton> : null}\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\n 确定\n </ElButton>\n </Fragment>\n );\n },\n });\n }\n });\n}\n","<template>\n <template v-for=\"item in viewItems\">\n <el-alert class=\"mb-2! upload-file-item\" @close=\"deleteFilePath(item.path!)\" :closable=\"item.completed\">\n <template #title>\n <div class=\"flex w-full justify-center items-center gap-1 pr-6\">\n <template v-if=\"item.completed\">\n <MKSvgIcon name=\"ep:document\" class=\"mr-2\" />\n <div class=\"w-full\">{{item.name ?? item.error ?? \"\"}}</div>\n </template>\n <template v-else>\n <MKSvgIcon name=\"ep:document\" class=\"mr-2\" />\n <ElProgress class=\"w-full\" status=\"success\" :percentage=\"item.progress\" :textInside=\"true\" :strokeWidth=\"20\" />\n </template>\n </div>\n </template>\n </el-alert>\n </template>\n <span v-if=\"multiple || viewItems.length == 0\" @click.prevent=\"fileSelect\">\n <slot>\n <el-button type=\"primary\">\n <MKSvgIcon name=\"ep:upload\" class=\"mr-2\"/>\n 选择文件\n </el-button>\n </slot>\n </span>\n</template>\n<script setup lang=\"ts\">\n import {useUploadComposable, useUploadService} from \"./composables.ts\"\n import { MKSvgIcon } from \"../../basic/SvgIcon\";\n import { UploadFileProps, UploadFileEmits } from \"./options.ts\";\n import {ElButton, ElMessage} from \"element-plus\";\n import {MKFileSelect} from \"../FileSelect\";\n\n defineOptions({ name: \"MKUploadFile\"});\n const props = defineProps(UploadFileProps)\n const emit = defineEmits(UploadFileEmits)\n\n // 上传服务\n const { fileUpload } = useUploadService(props.uploadService)\n\n // 上传组合 API 服务\n const { values,viewItems,deleteFilePath,uploadItems,appendFilePath } = useUploadComposable(props,{ emit });\n\n // 文件选择\n const fileSelect = async ()=>{\n\n // 选择结果\n const fileResult = await MKFileSelect({ type:\"doc\" });\n\n if(fileResult != null){\n // 网络路径\n if (typeof fileResult == \"string\") {\n appendFilePath(fileResult)\n }\n else if(fileResult.toString() == \"[object File]\"){\n uploadItems.push(await fileUpload(fileResult))\n }\n }\n else{\n ElMessage.warning({ message:\"请选择文件!\"})\n }\n }\n\n</script>\n\n<style lang=\"scss\" scoped>\n.upload-file-item{\n :deep(.el-alert__content){\n flex:1;\n width: 100%;\n .el-alert__title{\n display: flex;\n width: 100%;\n }\n }\n}\n</style>\n","<template>\n <div class=\"flex flex-wrap\">\n <div class=\"pos-relative image-item\" v-for=\"item in viewItems\" :style=\"{width: width, height: height}\">\n <el-image :style=\"{width: width, height: height}\" preview-teleported :z-index=\"1000\"\n :fit=\"fit\" :src=\"item.path\" :preview-src-list=\"values\"\n :zoom-rate=\"0.7\" :min-scale=\"0.3\" :max-scale=\"3\" class=\"bg-[#f4f4f4]\">\n <template #placeholder>\n <div class=\"w-full h-full flex justify-center items-center\">\n <MKSvgIcon name=\"ep:picture-filled\" :size=\"42\" v-loading=\"true\" />\n </div>\n </template>\n </el-image>\n <div v-if=\"!item.completed\"\n class=\"pos-absolute w-full h-full top-0 left-0 bg-[rgba(255,255,255,0.6)] flex justify-center items-center\">\n <el-progress type=\"dashboard\" :percentage=\"item.progress\"/>\n </div>\n <div v-else class=\"tools pos-absolute w-full top-0 left-0 flex justify-end items-center\">\n <el-button circle type=\"danger\" class=\"m-2\" @click.stop.prevent=\"deleteFilePath(item.path!)\">\n <MKSvgIcon name=\"ep:delete\" />\n </el-button>\n </div>\n </div>\n <el-button v-if=\"multiple || viewItems.length == 0\" class=\"cursor-pointer flex justify-center items-center\" @click.stop=\"imageSelect\" :style=\"{width: width, height: height}\">\n <MKSvgIcon :name=\"multiple ? 'ep:plus':'ep:picture-filled'\" :size=\"42\" />\n </el-button>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {ElProgress, ElButton, ElMessage} from \"element-plus\"\nimport {base64ToBlob, md5} from \"@maketribe/utils\";\nimport { useUploadService,useUploadComposable } from \"./composables.ts\"\nimport { MKSvgIcon } from \"../../basic/SvgIcon\";\nimport { UploadImageProps, UploadFileEmits } from \"./options.ts\";\nimport {MKFileSelect} from \"../FileSelect\";\n\n defineOptions({ name: \"MKUploadImage\"});\n const props = defineProps(UploadImageProps)\n const emit = defineEmits(UploadFileEmits)\n\n // 上传服务\n const { fileUpload } = useUploadService()\n // 上传组合 API 服务\n const { values,viewItems,deleteFilePath,appendFilePath,uploadItems } = useUploadComposable(props,{ emit })\n\n\n // 图片选择\n const imageSelect = async ()=>{\n\n let cutWidth = 0;\n let cutHeight = 0;\n\n // 裁切信息\n if (props.cutSize) {\n let cutInfo = props.cutSize.split(\"*\");\n cutWidth = parseInt(cutInfo[0]) || 0;\n cutHeight = parseInt(cutInfo[1]) || cutWidth;\n }\n\n // 选择结果\n const fileResult = await MKFileSelect({\n type:\"image\",\n imageOptions:{ cutWidth,cutHeight }\n });\n\n if(fileResult != null){\n\n // base 64 则上传\n if (typeof fileResult == \"string\") {\n\n if(fileResult.indexOf(\"data:image/\") == 0){\n // 开始上传\n const blob = base64ToBlob(fileResult);\n // 文件信息\n const file = new File([blob],\n `${md5(Math.random().toString())}.${blob.type.toString().replace(\"image/\", \"\") || \"png\"}`,\n {type: blob.type})\n\n uploadItems.push(await fileUpload(file))\n }\n else{\n // 添加文件\n appendFilePath(fileResult)\n }\n }\n else if(fileResult.toString() == \"[object File]\"){\n uploadItems.push(await fileUpload(fileResult))\n }\n }\n else{\n ElMessage.warning({ message:\"请选择图片!\"})\n }\n\n }\n\n\n</script>\n\n<style lang=\"scss\" scoped>\n .image-item{\n .tools{\n display: none;\n }\n &:hover{\n .tools{\n display: flex;\n }\n }\n }\n</style>\n","<template>\n <div class=\"flex flex-wrap\">\n <div class=\"pos-relative video-item\" v-for=\"item in viewItems\" :style=\"{width: width, height: height}\">\n <video :src=\"item.path\" width=\"100%\" height=\"100%\" class=\"bg-[#f4f4f4]\">\n </video>\n <div v-if=\"!item.completed\"\n class=\"pos-absolute w-full h-full top-0 left-0 bg-[rgba(255,255,255,0.6)] flex justify-center items-center\">\n <el-progress type=\"dashboard\" :percentage=\"item.progress\"/>\n </div>\n <div v-else class=\"tools pos-absolute w-full top-0 left-0 flex justify-end items-center\">\n <el-button circle type=\"danger\" class=\"m-2\" @click.stop.prevent=\"deleteFilePath(item.path!)\">\n <MKSvgIcon name=\"ep:delete\" />\n </el-button>\n </div>\n </div>\n <el-button v-if=\"multiple || viewItems.length == 0\" class=\"cursor-pointer flex justify-center items-center\" @click.stop=\"fileSelect\" :style=\"{width: width, height: height}\">\n <MKSvgIcon :name=\"multiple ? 'ep:plus':'ep:film'\" :size=\"42\" />\n </el-button>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {ElProgress, ElButton, ElMessage} from \"element-plus\"\n import { useUploadService,useUploadComposable } from \"./composables.ts\"\n import { MKSvgIcon } from \"../../basic/SvgIcon\";\n import { UploadVideoProps, UploadFileEmits } from \"./options.ts\";\nimport {MKFileSelect} from \"../FileSelect\";\n\n defineOptions({ name: \"MKUploadVideo\"});\n const props = defineProps(UploadVideoProps)\n const emit = defineEmits(UploadFileEmits)\n\n // 上传服务\n const { fileUpload } = useUploadService()\n // 上传组合 API 服务\n const { values,viewItems,deleteFilePath,uploadItems,appendFilePath } = useUploadComposable(props,{ emit })\n\n // 文件选择\n const fileSelect = async ()=>{\n\n // 选择结果\n const fileResult = await MKFileSelect({ type:\"video\" });\n\n if(fileResult != null){\n // 网络路径\n if (typeof fileResult == \"string\") {\n appendFilePath(fileResult)\n }\n else if(fileResult.toString() == \"[object File]\"){\n uploadItems.push(await fileUpload(fileResult))\n }\n }\n else{\n ElMessage.warning({ message:\"请选择视频!\"})\n }\n }\n\n</script>\n\n<style lang=\"scss\" scoped>\n.video-item{\n .tools{\n display: none;\n }\n &:hover{\n .tools{\n display: flex;\n }\n }\n}\n</style>\n","\nimport {withInstall} from \"@maketribe/utils\";\nexport * from \"./options.ts\";\nexport * from \"./composables.ts\";\nimport UploadFile from \"./UploadFile.vue\";\nimport UploadImage from \"./UploadImage.vue\";\nimport UploadVideo from \"./UploadVideo.vue\";\n\nconst MKUploadFile = withInstall(UploadFile);\nconst MKUploadImage = withInstall(UploadImage);\nconst MKUploadVideo = withInstall(UploadVideo);\n\nexport {MKUploadFile,MKUploadImage, MKUploadVideo}\n","import { Fragment, reactive } from \"vue\";\nimport { MKResourceSelectOptions, MKResourceSelectResult,} from \"./types\";\nimport { Dialoger } from \"@maketribe/dm\";\nimport MKResourceList, { ResourceManager } from \"../ResourceList\";\nimport { ElButton } from \"element-plus\";\n\nasync function ResourceSelect(\n options: MKResourceSelectOptions\n): Promise<MKResourceSelectResult> {\n return new Promise((resolve) => {\n const resourceManager = reactive(\n new ResourceManager(options)\n ) as ResourceManager;\n\n const dialogInstance = Dialoger.customRender({\n width: options.width ?? \"932px\",\n title: options.title ?? \"选择文件\",\n class: \"resource-select-dialog\",\n body: () => (\n <MKResourceList resourceManager={resourceManager}></MKResourceList>\n ),\n footer: () => {\n const file =\n resourceManager.selectResourceList.filter(\n (item) => !item.isDirectory\n )[0] ?? null;\n\n return (\n <Fragment>\n <ElButton\n onClick={() => {\n dialogInstance.destroy();\n resolve({ confirmed: false, data: null, path: \"\" });\n }}\n >\n 取消\n </ElButton>\n <ElButton\n type=\"primary\"\n disabled={!file}\n onClick={() => {\n dialogInstance.destroy();\n\n resolve({ confirmed: true, data: file, path: file.path });\n }}\n >\n 确认\n </ElButton>\n </Fragment>\n );\n },\n onClose: () => {\n setTimeout(() => {\n dialogInstance.destroy();\n }, 100);\n },\n });\n });\n}\n\nexport default ResourceSelect;\n","import ResourceSelect from \"./api.tsx\";\nexport * from \"./types.ts\";\n\nexport const MKResourceSelect = ResourceSelect;\nexport default MKResourceSelect;\n","import {DataTableOptions, DataTree, DataTreeNode, TableActionColumn, TableColumn} from \"@maketribe/dm\";\nimport {ElButton, ElCheckbox, ElMessage, ElPopover} from \"element-plus\";\nimport {DvOpt, OrderType} from \"@maketribe/request\";\nimport type {MsMenuItem} from \"./MsMenuForm\";\nimport {DATA_MODEL_NAME, MenuType, MenuUrlType, MODULE_NAME} from \"../../constants\";\nimport {MKListItem, MKSvgIcon, MKText} from \"../../components\";\nimport {MSAppClient} from \"../../core/MSAppClient\";\nimport {ref} from \"vue\";\nimport {MsRouteResult} from \"./MsRoute\";\n\nexport type MsMenuItemNode = MsMenuItem & {\n children: MsMenuItemNode[];\n targetUrl: string;\n};\n\nexport class MsMenuTree extends DataTree<MsMenuItemNode> {\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({\n name: MsMenuTree[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n sortFieldName: \"sort\",\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"data.title\", label: \"菜单描述\", align: \"left\" }),\n new TableColumn({\n name: \"data.routeTitle\",\n label: \"绑定路由\",\n align: \"left\",\n componentInfo: {\n component:({ column,index,row }:any)=>{\n // 允许绑定路由\n const allowBindRoute = row.data.type === MenuType.Menu && row.data.urlType == MenuUrlType.Inner;\n const loading = ref(false)\n return allowBindRoute ?\n (\n <div class=\"flex items-center\">\n {row.data.routeTitle}\n {row.data.targetUrl ? <MKText copy>\n <span class=\"color-[#4090ee] font-[14px] mx-1\">{row.data.targetUrl}</span>\n </MKText> : null}\n <ElPopover placement=\"right\" width=\"400\" trigger=\"click\" v-slots={\n {\n reference:()=> {\n return <ElButton text type=\"primary\" circle>\n {!!row.data.routeName ? <MKSvgIcon name={\"ep:edit\"} /> : \"绑定路由\"}\n </ElButton>\n }\n }\n }>\n <div v-loading={loading.value}>\n {\n row.data.routes.map((route:MsRouteResult)=>{\n return <div onClick={async ()=>{\n loading.value = true;\n await this.modifyBindRoute(row.data,route.id);\n loading.value = false;\n }}>\n <MKListItem class=\"cursor-pointer\" >\n <div class=\"flex start gap-1! items-center\">\n <div class=\"font-size-[16px]\">\n {!!route.iconName ? <MKSvgIcon name={route.iconName}/> : <b class=\"font-size-[18px]\">·</b>}\n </div>\n <div>\n {route.title}\n </div>\n </div>\n <ElCheckbox modelValue={row.data.routeId == route.id} />\n </MKListItem>\n </div>\n })\n }\n </div>\n </ElPopover>\n </div>\n ):\"-\";\n }\n },\n componentProps: {\n mapping: {\n [MenuType.Container]: \"菜单组\",\n [MenuType.Menu]: \"菜单\",\n [MenuType.SystemSettings]: \"系统设置\",\n },\n },\n }),\n new TableColumn({\n name: \"data.type\",\n width: \"100px\",\n label: \"菜单类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping: {\n [MenuType.Container]: \"菜单组\",\n [MenuType.Menu]: \"菜单\",\n [MenuType.SystemSettings]: \"系统设置\",\n },\n },\n }),\n new TableColumn({\n name: \"data.urlType\",\n width: \"100px\",\n label: \"链接类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping: {\n [MenuUrlType.Inner]: \"站内链接\",\n [MenuUrlType.Outer]: \"站外链接\",\n },\n },\n }),\n new TableActionColumn(),\n ]);\n this.dataFilter.setReady();\n }\n\n /**\n * 修改绑定路由\n * @param rowData\n * @param routeId\n */\n async modifyBindRoute(rowData:any, routeId:any){\n\n\n try {\n // 更新\n const response = await DvOpt.createInstance(this as any).save({\n id: rowData.id, routeId,\n });\n\n if (response.code === 200) {\n rowData.routeId = routeId;\n }\n else {\n ElMessage.error(response.msg);\n }\n }\n catch { ElMessage.error(\"网络异常\"); }\n\n }\n\n /**\n * 获取路由连接\n * @param item\n */\n getRoutePath(item: MsMenuItemNode){\n\n const route = item.routes.find((route) => route.id === item.routeId);\n\n let path = route?.route || \"\";\n\n if (!path && route) {\n\n const pageRoute = MSAppClient.instance!.pageManager.extendsPages.find((item) => item.name === route.name);\n\n path = pageRoute?.path ?? \"\";\n\n }\n\n if (!path && route) {\n\n const match = route.name.match(/^dv\\/([^/]+)\\/(edit|.+)$/i);\n\n if (match) { path = match[2] === \"edit\" ? `/dv/${match[1]}/edit` : `/dv/${match[1]}`; }\n }\n\n return path;\n }\n\n /**\n * 数据格式化\n * @param item\n */\n formatItem(item: MsMenuItemNode): MsMenuItemNode {\n item.type += \"\";\n item.children = item.children || [];\n item.targetUrl = item.url || this.getRoutePath(item);\n return item;\n }\n\n public nodeHasChildren(node: DataTreeNode<MsMenuItemNode>): boolean {\n return ([MenuType.Container, MenuType.SystemSettings] as string[]).includes(\n node.data?.type as string\n );\n }\n\n async load(params?: Record<string, any>) {\n return super.loadAll(params);\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n FormDetailColumn,\n} from \"@maketribe/dm\";\nimport { MsMenuTable } from \"./MsMenuTable\";\nimport { MsRouteTable, MsRouteForm, MsRouteResult } from \"./MsRoute\";\nimport {\n MsPermissionPointDefine,\n MsPermissionPointDefineForm,\n MsPermissionPointDefineTable,\n} from \"./MsPermissionPoint\";\nimport { DATA_MODEL_NAME, MenuType,MenuUrlType } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MenuData } from \"../../core\";\nimport { MsMenuTree } from \"./MsMenuTree.tsx\";\n\nexport type MsMenuResult = MenuData & { memo?: string };\n\nexport type MsMenuItem = {\n id: string;\n title: string;\n iconName: string;\n pid: string;\n routeId: string;\n sort: string;\n type: string;\n urlType: string;\n url?: string;\n routes: MsRouteResult[];\n permissionPoints: MsPermissionPointDefine[];\n memo: string;\n};\n\nexport class MsMenuForm extends DataForm<MsMenuResult, MsMenuItem> {\n\n static [DATA_MODEL_NAME]: string = \"ms-menu\";\n\n // 构造\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMenuForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n // 父菜单数据表\n public parentMenuTable:MsMenuTree = this.register(new MsMenuTree({ pageSize: 10 }));\n // 路由定义\n public routeDefineTable:MsRouteTable = this.register(new MsRouteTable({ pageSize: 10 }));\n\n protected async initialize() {\n await super.initialize();\n\n await Promise.all([\n Promise.all([\n await this.parentMenuTable.init(),\n await this.parentMenuTable.useCondition((group) => {\n group.addCondition(\n \"type\",\n \"in\",\n `${[MenuType.Container, MenuType.SystemSettings].map((menuType) => parseInt(menuType)).join(\",\")}`\n );\n }).loadAll()\n ]),\n Promise.all([\n await this.routeDefineTable.init(),\n await this.routeDefineTable.loadAll()\n ])\n ])\n\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"title\", label: \"菜单描述\", required: true }),\n new FormColumn({\n name: \"iconName\",\n label: \"图标\",\n componentInfo: \"MKFormIconSelect\",\n required: true,\n }),\n new FormColumn({\n name: \"type\",\n label: \"菜单类型\",\n componentInfo: \"MKFormDataSelect\",\n defaultValue: MenuType.Menu,\n required: true,\n componentProps: {\n options: [\n { value: MenuType.Container, label: \"菜单组\" },\n { value: MenuType.Menu, label: \"菜单\" },\n { value: MenuType.SystemSettings, label: \"系统设置\" },\n ],\n },\n }),\n new FormColumn({\n name: \"urlType\",\n label: \"链接类型\",\n defaultValue: MenuUrlType.Inner,\n componentInfo: \"MKFormDataSelect\",\n required: true,\n componentProps: {\n options: [\n { value: MenuUrlType.Inner, label: \"站内路由\" },\n { value: MenuUrlType.Outer, label: \"站外链接\" },\n ],\n },\n }),\n new FormColumn({ name: \"url\", label: \"跳转链接\" }),\n // new FormColumn({\n // name: \"routeId\",\n // label: \"默认路由\",\n // componentInfo: \"MKFormDataTableSelect\",\n // componentProps: {\n // labelFieldName: \"title\",\n // dataTable: this.routeDefineTable,\n // },\n // }),\n new FormColumn({\n name: \"pid\",\n label: \"父菜单\",\n componentInfo: \"MKDataTreeSelect\",\n // componentInfo: \"MKFormDataTableSelect\",\n componentProps: {\n labelFieldName: \"title\",\n dataTree: this.parentMenuTable,\n clearable: true,\n },\n }),\n new FormColumn({ name: \"sort\", label: \"排序\", defaultValue: \"0\" }),\n new FormDetailColumn({\n name: \"routes\",\n label: \"路由\",\n associationFieldName: \"menuId\",\n detailForm: this.register(new MsRouteForm()),\n detailTable: this.routeDefineTable,\n }),\n new FormDetailColumn({\n name: \"permissionPoints\",\n label: \"权限点\",\n associationFieldName: \"menuId\",\n detailForm: this.register(new MsPermissionPointDefineForm()),\n detailTable: this.register(new MsPermissionPointDefineTable()),\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n // 表单类型改变的事件\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n // if (dataFormType === DataFormType.UPDATE) {\n // this.routeDefineTable.useCondition((group) => {\n // group.clear();\n // group.addCondition(\"menuId\", \"=\", this.data!.id);\n // });\n // }\n this.getColumn(\"type\")!.disabled = dataFormType !== DataFormType.ADD;\n this.getColumn(\"urlType\")!.disabled = dataFormType !== DataFormType.ADD;\n });\n // 表单值改变的事件\n this.formItemValueChangeEvent.on(({ formItem }) => {\n if (formItem.name === \"type\" || formItem.name === \"urlType\") {\n // 菜单组不显示路由和权限点定义\n const visible = this.data?.type === MenuType.Menu && this.data.urlType === MenuUrlType.Inner;\n // this.getColumn(\"routeId\")!.visible = visible;\n this.getColumn(\"routes\")!.visible = visible;\n this.getColumn(\"permissionPoints\")!.visible = visible;\n }\n });\n\n\n }\n\n /**\n * 提交数据处理\n * @param data\n */\n formatSubmitData(data: any) {\n\n const permissionPoints = data.type === MenuType.Menu && data.urlType === MenuUrlType.Inner ? data.permissionPoints : [];\n const routes = data.type === MenuType.Menu && data.urlType === MenuUrlType.Inner ? data.routes : [];\n const parsedType = parseInt(data.type);\n const parsedUrlType = parseInt(data.urlType);\n\n return {\n ...data,\n type: isNaN(parsedType) ? parseInt(MenuType.Menu) : parsedType,\n urlType: isNaN(parsedUrlType) ? parseInt(MenuUrlType.Inner) : parsedUrlType,\n iconName: data.iconName || null,\n pid: data.pid || null,\n routeId: data.routeId || null,\n permissionPoints,\n routes,\n };\n }\n\n /**\n * 表单数据处理\n * @param item\n */\n formatItem(item: MsMenuResult): MsMenuItem {\n return {\n id: item.id,\n title: item.title || \"\",\n iconName: item.iconName || \"\",\n pid: item.pid || \"\",\n routeId: item.routeId,\n type: item.type ? `${item.type}` : \"1\",\n urlType: `${item.urlType}` === MenuUrlType.Inner ? MenuUrlType.Inner : MenuUrlType.Outer,\n sort: item.sort || \"0\",\n url:item.url,\n routes: (item.routes || []) as unknown as MsMenuItem[\"routes\"],\n permissionPoints: (item.permissionPoints ||\n []) as unknown as MsMenuItem[\"permissionPoints\"],\n memo: item.memo || \"\",\n };\n }\n}\n","import { R, ResponseConfig } from \"@maketribe/request\";\nimport { DataTableOptions } from \"@maketribe/dm\";\nimport {\n MsMenuItem,\n MsMenuResult,\n MsMenuTable,\n MsPermissionPointDefine,\n MsPermissionPointDefineTable,\n MsRoute,\n MsRouteTable,\n} from \"../MsMenu\";\nimport { MsRole } from \"./MsRoleForm\";\nimport { MsRoleRouteTable } from \"./ms-role-route\";\nimport { MsRolePermissionPointTable } from \"./ms-role-permission-point\";\nimport { postTraverse } from \"@maketribe/utils\";\n\nexport type MsRolePermissionPointDefine = MsPermissionPointDefine & {\n originalSelected: boolean;\n selected: boolean;\n};\n\nexport type MsRoleMenuNode = {\n permissionPoints: MsRolePermissionPointDefine[];\n routes: MsRoute[];\n originalSelected: boolean;\n selected: boolean;\n indeterminate: boolean;\n children: MsRoleMenuNode[];\n} & MsMenuItem;\n\nexport class RolePermissionConfigTable extends MsMenuTable<MsRoleMenuNode> {\n roleRouteTable: MsRoleRouteTable;\n rolePermissionPointTable: MsRolePermissionPointTable;\n permissionPointDefineTable: MsPermissionPointDefineTable<MsRolePermissionPointDefine>;\n routeDefineTable: MsRouteTable;\n rootRoleMenuNodes: MsRoleMenuNode[] = [];\n currentRole: MsRole | null = null;\n currentRoleId: MsRole[\"id\"] = \"\";\n currentRoleDesc: MsRole[\"desc\"] = \"\";\n\n constructor(options: Omit<DataTableOptions, \"name\"> = {}) {\n super({ ...options });\n // 角色路由\n this.roleRouteTable = new MsRoleRouteTable();\n // 角色所属权限点数据\n this.rolePermissionPointTable = new MsRolePermissionPointTable();\n // 权限点定义\n this.permissionPointDefineTable = new (class extends MsPermissionPointDefineTable<MsRolePermissionPointDefine> {\n formatItem(item: MsPermissionPointDefine): MsRolePermissionPointDefine {\n return {\n ...super.formatItem(item),\n originalSelected: false,\n selected: false,\n };\n }\n })({\n interfaceURL: { list: \"/ms/dv/ms-permission-point-def/allList\" },\n });\n // 路由定义\n this.routeDefineTable = new MsRouteTable({ interfaceURL: { list: \"/ms/dv/ms-route/allList\" }, });\n }\n\n /**\n * 初始化\n * @protected\n */\n protected async initialize() {\n await super.initialize();\n [\n this.roleRouteTable.getLoadingManager(),\n this.rolePermissionPointTable.getLoadingManager(),\n this.permissionPointDefineTable.getLoadingManager(),\n this.routeDefineTable.getLoadingManager(),\n ].forEach((loadingManager) => {\n this.getLoadingManager().addLoadingManager(loadingManager);\n });\n\n await Promise.all([\n await this.roleRouteTable.init(),\n await this.rolePermissionPointTable.init(),\n await this.permissionPointDefineTable.init(),\n await this.routeDefineTable.init()\n ]);\n\n console.log(\"初始化 initiate\");\n\n this.dataFilter.setReady();\n }\n\n /**\n * 加载请求\n * @param params\n * @protected\n */\n loadRequest(params: Record<string, any>): Promise<ResponseConfig<R<MsMenuResult[]> & { totalRecCount: string }>> {\n return this.loadAllRequest(params);\n }\n\n /**\n * 数据格式化\n * @param item\n */\n formatItem(item: MsMenuResult): MsRoleMenuNode {\n\n const permissionPointDefines = this.permissionPointDefineTable.getList();\n const routeDefines = this.routeDefineTable.getList();\n\n return {\n ...super.formatItem(item),\n routes: routeDefines.filter(\n (routeDefine) => routeDefine.menuId === item.id\n ) as MsRoleMenuNode[\"routes\"],\n permissionPoints: permissionPointDefines.filter(\n (permissionPointDefine) => permissionPointDefine.menuId === item.id\n ),\n originalSelected: false,\n selected: false,\n indeterminate: false,\n children: [],\n };\n }\n\n /**\n * 设置数据\n * @param list\n */\n setList(list: MsRoleMenuNode[]): void {\n\n super.setList(list);\n\n const rootRoleMenuNodes = [];\n\n for (const roleMenuNode of list) {\n if (!roleMenuNode.pid) {\n rootRoleMenuNodes.push(roleMenuNode);\n }\n\n for (const item of list) {\n if (item.pid === roleMenuNode.id) {\n roleMenuNode.children.push(item);\n }\n }\n }\n\n this.rootRoleMenuNodes = this.calculateNotEmptyNode(rootRoleMenuNodes);\n }\n\n /**\n * 计算不为空的节点\n * @param list\n */\n calculateNotEmptyNode(list: MsRoleMenuNode[]) {\n\n const result = list.filter(\n (item) => item.routes.length || item.children.length\n );\n\n let nodes = [...result];\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n node.children = node.children.filter(\n (item) => item.routes.length || item.children.length\n );\n\n nodes = nodes.concat(node.children);\n }\n\n return result;\n }\n\n /**\n * 获取根角色菜单节点列表\n */\n getRootRoleMenuNodes() {\n return this.rootRoleMenuNodes;\n }\n\n /**\n * 加载角色权限配置表\n * @param params\n */\n async load(params?: Record<string, any>) {\n await Promise.all([\n this.permissionPointDefineTable.load(),\n this.routeDefineTable.load(),\n ]);\n\n const loadResult = await super.load(params);\n\n if (loadResult.data.code === 200) {\n this.restoreDefaultSelect();\n }\n\n return loadResult;\n }\n\n /**\n * 选中角色所属的权限\n * @param role\n */\n async selectRolePermission(role: MsRole | null) {\n\n this.currentRole = role;\n this.currentRoleId = role?.id || \"\";\n this.currentRoleDesc = role?.desc || \"\";\n\n const [\n roleRouteTableResult,\n rolePermissionPointTableResult\n ] = await Promise.all([\n this.roleRouteTable.useCondition(condition=>{\n condition.clear().addCondition(\n \"roleId\",\n \"=\",\n this.currentRoleId\n )\n }).load(),\n this.rolePermissionPointTable.useCondition(condition=>{\n condition.clear().addCondition(\n \"roleId\",\n \"=\",\n this.currentRoleId\n );\n }).load(),\n ]);\n\n if (roleRouteTableResult.data.code !== 200) {\n return;\n }\n\n if (rolePermissionPointTableResult.data.code !== 200) {\n return;\n }\n\n\n this.restoreDefaultSelect();\n }\n\n clearSelected() {\n for (const roleMenu of this.getList()) {\n roleMenu.indeterminate = roleMenu.selected = false;\n }\n\n for (const rolePermissionPoint of this.permissionPointDefineTable.getList()) {\n rolePermissionPoint.selected = false;\n }\n }\n\n protected calcSelect() {\n\n postTraverse<MsRoleMenuNode>(this.getRootRoleMenuNodes(), (roleMenu) => {\n // 如果自叶级菜单\n if (roleMenu.children.length === 0) {\n // 选中的权限点\n const selectedPermissionPoints = roleMenu.permissionPoints.filter(\n (permissionPointDefine) => permissionPointDefine.selected\n );\n\n // 如果有权限点选择就赋予路由权限\n roleMenu.selected =\n roleMenu.permissionPoints.length === 0\n ? roleMenu.selected\n : !!selectedPermissionPoints.length || roleMenu.selected;\n // 如果不是所有权限点都激活就标识是部分选择\n roleMenu.indeterminate =\n roleMenu.permissionPoints.length === 0 ||\n selectedPermissionPoints.length === 0\n ? false\n : selectedPermissionPoints.length <\n roleMenu.permissionPoints.length;\n\n return;\n }\n\n // 选中的子菜单\n const selectedChildren = roleMenu.children.filter(\n (item) => item.selected\n );\n // 如果有子菜单选中就路由权限\n roleMenu.selected = !!selectedChildren.length;\n // 如果不是所有子菜单都激活就标识是部分选择\n roleMenu.indeterminate =\n selectedChildren.length === 0\n ? false\n : selectedChildren.length < roleMenu.children.length;\n });\n }\n\n restoreDefaultSelect() {\n\n this.clearSelected();\n\n const permissionPointDefineList = this.permissionPointDefineTable.getList();\n const rolePermissionList = this.rolePermissionPointTable.getList();\n\n for (const permissionPointDefine of permissionPointDefineList) {\n permissionPointDefine.originalSelected = permissionPointDefine.selected =\n false;\n }\n\n if (permissionPointDefineList.length) {\n for (const rolePermission of rolePermissionList) {\n const permissionPointDefine = permissionPointDefineList.find(\n (permissionPointDefine) =>\n permissionPointDefine.id === rolePermission.permissionPointDefId\n );\n\n if (permissionPointDefine) {\n permissionPointDefine.originalSelected =\n permissionPointDefine.selected = true;\n }\n }\n }\n\n const menuList = this.getList();\n const roleRouteList = this.roleRouteTable.getList();\n\n for (const menu of menuList) {\n menu.originalSelected = menu.selected = false;\n }\n\n if (menuList.length) {\n for (const roleRoute of roleRouteList) {\n const menu = menuList.find((menu) =>\n menu.routes.find(\n (routeDefine) => routeDefine.id === roleRoute.routeId\n )\n );\n\n if (menu) {\n menu.originalSelected = menu.selected = true;\n }\n }\n }\n\n this.calcSelect();\n }\n\n toggleRoleMenu(\n roleMenu: MsRoleMenuNode,\n selected: boolean = !roleMenu.selected\n ) {\n postTraverse<MsRoleMenuNode>([roleMenu], (roleMenu) => {\n // 如果自叶级菜单\n if (roleMenu.children.length === 0) {\n for (const permissionPointDefine of roleMenu.permissionPoints) {\n permissionPointDefine.selected = selected;\n }\n\n roleMenu.selected = selected;\n return;\n }\n\n roleMenu.selected = selected;\n });\n\n this.calcSelect();\n }\n\n /**\n * 切换角色权限点\n * @param permissionPointDefine\n * @param selected\n */\n toggleRolePermissionPoint(permissionPointDefine: MsRolePermissionPointDefine,selected: boolean = !permissionPointDefine.selected) {\n\n permissionPointDefine.selected = selected;\n\n this.calcSelect();\n }\n\n /**\n * 提交权限\n */\n async submitPermission() {\n this.loadingManager.startLoading();\n const permissionPointDefines = this.permissionPointDefineTable.getList();\n const removePermissionPointDefines = permissionPointDefines.filter(\n (permissionPointDefine) =>\n permissionPointDefine.originalSelected &&\n !permissionPointDefine.selected\n );\n\n const addPermissionPointDefine = permissionPointDefines.filter(\n (permissionPointDefine) =>\n !permissionPointDefine.originalSelected &&\n permissionPointDefine.selected\n );\n\n const menus = this.getList();\n const removeRoutes = menus\n .filter((menu) => menu.originalSelected && !menu.selected)\n .flatMap((menu) => menu.routes);\n const addRoutes = menus\n .filter((menu) => !menu.originalSelected && menu.selected)\n .flatMap((menu) => menu.routes);\n\n if (removePermissionPointDefines.length) {\n const rolePermissionPoints = this.rolePermissionPointTable.getList();\n const deleteRolePermissionPointResult =\n await this.rolePermissionPointTable.batchDelete(\n removePermissionPointDefines\n .map(\n (permissionPointDefine) =>\n rolePermissionPoints.find(\n (rolePermissionPoint) =>\n rolePermissionPoint.permissionPointDefId ===\n permissionPointDefine.id\n )!\n )\n .filter(Boolean)\n );\n\n if (deleteRolePermissionPointResult.data.code !== 200) {\n return deleteRolePermissionPointResult;\n }\n }\n\n if (removeRoutes.length) {\n const roleRoutes = this.roleRouteTable.getList();\n const deleteRoleRouteResult = await this.roleRouteTable.batchDelete(\n removeRoutes\n .map(\n (route) =>\n roleRoutes.find((roleRoute) => roleRoute.routeId === route.id)!\n )\n .filter(Boolean)\n );\n\n if (deleteRoleRouteResult.data.code !== 200) {\n return deleteRoleRouteResult;\n }\n }\n\n if (addPermissionPointDefine.length) {\n const addRolePermissionPointResult =\n await this.rolePermissionPointTable.batchAdd(\n addPermissionPointDefine.map((item) => ({\n id: \"\",\n roleId: this.currentRoleId,\n permissionPointDefId: item.id,\n }))\n );\n\n if (addRolePermissionPointResult.data.code !== 200) {\n return addRolePermissionPointResult;\n }\n }\n\n if (addRoutes.length) {\n const addRoleRouteResult = await this.roleRouteTable.batchAdd(\n addRoutes.map((item) => ({\n id: \"\",\n roleId: this.currentRoleId,\n routeId: item.id,\n }))\n );\n\n if (addRoleRouteResult.data.code !== 200) {\n return addRoleRouteResult;\n }\n }\n\n await this.selectRolePermission(this.currentRole);\n this.loadingManager.completeLoading();\n }\n\n /**\n * 是否发生变更\n */\n hasChange() {\n const permissionPointDefines = this.permissionPointDefineTable.getList();\n const removePermissionPointDefines = permissionPointDefines.filter(\n (permissionPointDefine) =>\n permissionPointDefine.originalSelected &&\n !permissionPointDefine.selected\n );\n\n const addPermissionPointDefine = permissionPointDefines.filter(\n (permissionPointDefine) =>\n !permissionPointDefine.originalSelected &&\n permissionPointDefine.selected\n );\n\n const menus = this.getList();\n const removeRoutes = menus\n .filter((menu) => menu.originalSelected && !menu.selected)\n .flatMap((menu) => menu.routes);\n const addRoutes = menus\n .filter((menu) => !menu.originalSelected && menu.selected)\n .flatMap((menu) => menu.routes);\n return !!(\n removePermissionPointDefines.length ||\n removeRoutes.length ||\n addPermissionPointDefine.length ||\n addRoutes.length\n );\n }\n}\n","import {\n DataForm,\n DataFormOptions,\n DataFormType,\n FormColumn,\n} from \"@maketribe/dm\";\nimport { MsRoleTable } from \"../ms-role\";\nimport { DATA_MODEL_NAME, EMAIL_PATTERN } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport type MsMemberResult = {\n id: string;\n name: string;\n wechatNo: string;\n nickName: string;\n email: string;\n normalizedEmail: string;\n emailConfirmed: boolean;\n phoneNumber: string;\n phoneNumberConfirmed: string;\n userName: string;\n normalizedUserName: string;\n avatar: string;\n roles: any[];\n passwordHash: string;\n // depts: any[];\n valid: number;\n lockoutEnabled?: number;\n accessFailedCount?: number;\n lockoutEnd?: string;\n memo?: string;\n twoFactorEnabled: boolean;\n concurrencyStamp: string;\n securityStamp: string;\n isLock: number;\n};\n\nexport type MsMember = {\n id: string;\n name: string;\n wechatNo: string;\n nickName: string;\n email: string;\n normalizedEmail: string;\n emailConfirmed: boolean;\n phoneNumber: string;\n phoneNumberConfirmed: string;\n userName: string;\n normalizedUserName: string;\n avatar: string;\n roles: any[];\n passwordHash: string;\n // depts: any[];\n valid: number;\n lockoutEnabled?: number;\n accessFailedCount?: number;\n lockoutEnd?: string;\n memo?: string;\n twoFactorEnabled: boolean;\n concurrencyStamp: string;\n securityStamp: string;\n isLock: number;\n};\n\nexport class MsMemberForm<\n T extends MsMemberResult = MsMemberResult,\n F extends MsMember = MsMember\n> extends DataForm<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-member\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"name\", label: \"姓名\", required: true }),\n new FormColumn({ name: \"wechatNo\", label: \"微信号\", defaultValue: null }),\n new FormColumn({ name: \"nickName\", label: \"昵称\", required: true }),\n new FormColumn({\n name: \"email\",\n label: \"邮箱\",\n required: true,\n rules: [{ message: \"邮箱格式有误\", pattern: EMAIL_PATTERN }],\n }),\n new FormColumn({ name: \"phone\", label: \"手机号\", defaultValue: null }),\n new FormColumn({\n name: \"account\",\n label: \"账号\",\n required: true,\n disabled: true,\n }),\n new FormColumn({\n name: \"avatar\",\n label: \"头像\",\n defaultValue: null,\n componentInfo: \"MKFormImageUpload\",\n }),\n new FormColumn({\n name: \"roles\",\n label: \"角色\",\n defaultValue: null,\n required: true,\n // componentInfo: \"MKFormDataTableSelect\",\n componentInfo: \"MKFormDataSelect\",\n componentProps: {\n multiple: true,\n objectValue: true,\n labelFieldName: \"desc\",\n filterable: false,\n filterFieldNames: [\"desc\", \"name\"],\n dataTable: new MsRoleTable(),\n },\n }),\n new FormColumn({\n name: \"memo\",\n label: \"备注\",\n componentInfo: \"MKFormInput\",\n componentProps: { type: \"textarea\", rows: 4 },\n }),\n ]);\n\n this.dataFormTypeChangeEvent.on(({ dataFormType }) => {\n const accountColumn = this.getColumn(\"account\");\n\n if (accountColumn) {\n accountColumn.disabled = dataFormType !== DataFormType.ADD;\n }\n });\n }\n\n // formatItem(item: T): F {\n // debugger;\n // return item;\n // return {\n // id: item.id,\n // name: item.name || \"\",\n // wechatNo: item.wechatNo || \"\",\n // nickName: item.nickName || \"\",\n // email: item.email || \"\",\n // phoneNumber: item.phoneNumber || \"\",\n // userName: item.userName || \"\",\n // avatar: item.avatar,\n // roles: item.roles,\n // // depts: item.depts?.map((department) => department.deptId),\n // valid: item.valid,\n // memo: item.memo || \"\",\n // } as F;\n // }\n}\n","import {ElImage} from \"element-plus\";\nimport {MKSvgIcon} from \"../../../components/basic/SvgIcon\";\nimport {dataTableColumnProps} from \"../../../components/data-model\";\nimport {defineComponent} from \"vue\";\n\nexport default defineComponent({\n props: dataTableColumnProps,\n setup(props) {\n return () => {\n return (\n <div class=\"flex py-2 align-center\">\n <ElImage\n class=\"w-[64px] h-[64px] bg-[#dbdbdc]\"\n style={{borderRadius:\"8px\"}}\n src={props.row.avatar}\n v-slots={{\n error: () => (\n <div class=\"w-full h-full flex flex-items-center justify-center\">\n <MKSvgIcon name=\"ep:user-filled\" class=\"member-info-img__icon\" size={40} />\n </div>\n ),\n }}\n />\n <div class=\"flex items-start flex-col mx-2\">\n <b>\n {props.row.name || props.row.nickName}\n </b>\n <div class=\"flex flex-items-center\">\n <MKSvgIcon name=\"mdi:account-box\" class=\"m-r-2\"/>\n {props.row.account}\n </div>\n <div class=\"flex flex-items-center\">\n <MKSvgIcon name=\"mdi:email-edit-outline\" class=\"m-r-2\"/>\n {props.row.email}\n </div>\n </div>\n </div>\n );\n };\n },\n});\n","import { defineComponent } from \"vue\";\nimport { dataTableColumnProps } from \"../../../components\";\nimport { ElTag } from \"element-plus\";\n\nexport default defineComponent({\n props: dataTableColumnProps,\n setup(props) {\n return () => {\n const roles = props.row.roles.map((role: any) => (\n <ElTag key={role.id} size=\"large\" type=\"info\" class=\"mx-2\">\n {role.desc}\n </ElTag>\n ));\n\n return <div class=\"roles-Info\">{roles}</div>;\n };\n },\n});\n","import {R} from \"@maketribe/request\";\nimport {\n TableColumn,\n DataTable,\n DataTableOptions,\n FilterColumn,\n TableActionColumn,\n ActionButton,\n DeleteButton,\n EditButton,\n Messager,\n Dialoger,\n FormColumn,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n DialogInstance,\n ImportButton\n} from \"@maketribe/dm\";\nimport {MsMember, MsMemberForm, MsMemberResult} from \"./MsMemberForm\";\nimport MemberNickNameColumn from \"./components/MemberNickNameColumn\";\nimport MemberRolesColumn from \"./components/MemberRolesColumn\";\nimport {MSAppClient} from \"../../core\";\nimport {MKSvgIcon,MKText} from \"../../components\";\nimport {DATA_MODEL_NAME,MODULE_NAME} from \"../../constants\";\n\nexport type MsMemberTableItem = Omit<MsMember, \"passwordHash\"> & {\n type: number;\n};\n\nexport class MsMemberTable extends DataTable<MsMemberResult,MsMemberTableItem> {\n static [DATA_MODEL_NAME]: string = \"ms-member\";\n\n activeMemberForm: MsMemberForm;\n\n activeDialog: DialogInstance | null = null;\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsMemberTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n this.activeMemberForm = this.register(\n new (class extends MsMemberForm {\n\n formatSubmitData(data: any) {\n data = super.formatSubmitData(data);\n if (data.valid !== 1) {\n Reflect.deleteProperty(data, \"roles\");\n }\n return data;\n }\n })()\n );\n }\n\n /**\n * 初始化\n * @protected\n */\n protected async initialize() {\n\n await super.initialize();\n\n await this.initActiveMemberForm();\n\n const isSuperAdmin = MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false;\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new ImportButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () => isSuperAdmin,\n }),\n ];\n\n if (!isSuperAdmin) {\n this.useCondition((group) => {\n //只有超级管理员可以查看超级管理员\n group.addCondition(\"isSuper\", \"!=\", 1);\n });\n }\n\n // 筛选\n this.dataFilter.setColumns([\n new FilterColumn({\n name: \"name\",\n label: \"姓名\",\n componentInfo: \"MKConditionInput\",\n search: true\n }),\n new FilterColumn({\n name: \"wechatNo\",\n label: \"微信号\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"nickName\",\n label: \"昵称\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"email\",\n label: \"邮箱\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"phone\",\n label: \"手机号\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"account\",\n label: \"账号\",\n componentInfo: \"MKConditionInput\",\n }),\n new FilterColumn({\n name: \"createdAt\",\n label: \"创建时间\",\n componentInfo: \"MKConditionDate\",\n defaultValue: [\"2024-01-20 00:00:00\", \"2024-01-21 00:00:00\"]\n }),\n ]);\n\n this.setColumns([\n new TableColumn({\n name: \"nickName\",\n label: \"账号信息\",\n align: \"left\",\n minWidth: \"200px\",\n componentInfo: {\n name: \"\",\n component: MemberNickNameColumn,\n },\n }),\n new TableColumn({\n name: \"roles\",\n label: \"角色\",\n minWidth: \"150px\",\n align: \"left\",\n componentInfo: {\n name: \"\",\n component: MemberRolesColumn,\n },\n }),\n new TableColumn({\n name: \"type\",\n label: \"状态\",\n minWidth: \"80px\",\n componentInfo: \"MKColumnTag\",\n componentProps: {\n options: [\n {value: 1, label: \"待激活\"},\n {value: 2, label: \"已锁定\", type: \"danger\"},\n {value: 3, label: \"正常\", type: \"success\"},\n ],\n },\n }),\n new TableColumn({name: \"memo\", label: \"备注\", minWidth: \"150px\"}),\n // new TableColumn({ name: \"email\", label: \"邮箱\", minWidth: \"200px\" }),\n // new TableColumn({ name: \"phone\", label: \"手机号\", minWidth: \"120px\" }),\n // new TableColumn({ name: \"wechatNo\", label: \"微信号\", minWidth: \"140px\" }),\n // new TableColumn({\n // name: \"valid\",\n // label: \"微信号\",\n // minWidth: \"140px\",\n // visible: false,\n // }),\n new TableActionColumn({\n width: \"240px\",\n buttons: [\n new ActionButton({\n label: \"激活用户\",\n handler: async (row) => {\n this.activeDialog = await Dialoger.dataFormDialog({\n dataForm: this.activeMemberForm,\n recId: row.id,\n });\n },\n predicate: (member: MsMemberTableItem) => member.valid === 0,\n }),\n new ActionButton({\n label: \"重置密码\",\n handler: async (row) => {\n const isConfirm = await Dialoger.confirm({\n title: \"重置密码\",\n message: \"是否重置密码\",\n type: \"warning\",\n cancelButtonText: \"取消\",\n confirmButtonText: \"确定\",\n });\n if (!isConfirm) {\n return;\n }\n this.loadingManager.startLoading();\n\n try {\n const response = await this.dataViewRequest.callDVRequest<\n R<string>\n >({\n action: `reset-password/${row.id}`,\n });\n\n if (response.data.code !== 200) {\n Messager.error({\n message: response.data.msg || \"重置密码失败\",\n });\n return;\n }\n\n Dialoger.confirm({\n title: \"重置密码成功\",\n message: (\n <div class=\"flex\">\n <MKSvgIcon name=\"InfoFilled\" class=\"color-[#E6A23C] font-[20px] mr-2\"></MKSvgIcon>\n 你的新密码为:<MKText copy><span\n class=\"color-[#4090ee] font-[14px]\">{response.data.data}</span></MKText>\n </div>\n ),\n type: \"warning\",\n cancelButtonText: \"取消\",\n confirmButtonText: \"确定\",\n });\n } catch (e) {\n console.error(e);\n Messager.error({message: \"网络异常\"});\n } finally {\n this.loadingManager.completeLoading();\n }\n },\n predicate: (member: MsMemberTableItem) => member.valid === 1,\n }),\n new ActionButton({\n label: \"解锁\",\n handler: async (row) => {\n const isConfirm = await Dialoger.instance.confirm({\n title: \"解锁\",\n message: \"是否解锁?\",\n type: \"warning\",\n cancelButtonText: \"取消\",\n confirmButtonText: \"确定\",\n });\n if (!isConfirm) {\n return;\n }\n this.loadingManager.startLoading();\n\n const response =\n await this.activeMemberForm.dataViewRequest.update({\n id: row.id,\n isLock: 0,\n errorCount: 0,\n unlockDatetime: null,\n });\n\n if (response.data.code !== 200) {\n Messager.error({message: response.data.msg});\n return;\n }\n this.loadingManager.completeLoading();\n this.load();\n },\n predicate: (member: MsMemberTableItem) => member.isLock === 1,\n }),\n new EditButton({\n predicate: (member: MsMemberTableItem) => member.valid === 1,\n }),\n new DeleteButton(),\n ],\n }),\n ]);\n }\n\n /**\n * 初始化激活成员表单\n * @protected\n */\n protected async initActiveMemberForm() {\n\n const activeMemberForm = this.activeMemberForm;\n\n await activeMemberForm.init();\n\n activeMemberForm.setColumns([\n activeMemberForm.getColumn(\"id\")!,\n new FormColumn({\n name: \"valid\",\n label: \"是否通过\",\n defaultValue: 0,\n componentInfo: \"MKFormRadioBox\",\n required: true,\n componentProps: {\n options: [\n {label: \"通过\", value: 1},\n {label: \"不通过\", value: 0},\n ],\n },\n }),\n activeMemberForm.getColumn(\"roles\")!,\n activeMemberForm.getColumn(\"memo\")!\n ]);\n\n activeMemberForm.beforeSubmitEvent.on(() => {\n\n this.approveMember();\n\n return false;\n });\n\n const rolesColumn = activeMemberForm.getColumn(\"roles\")!;\n\n activeMemberForm.getColumn(\"valid\")!.valueChangeEvent.on(({value}) => {\n rolesColumn.disabled = value !== 1;\n });\n }\n\n /**\n * 申请成员\n */\n async approveMember() {\n\n try {\n\n if (this.activeMemberForm.loading) {\n return;\n }\n\n this.activeMemberForm.getLoadingManager().startLoading();\n\n const _data = this.activeMemberForm.data!;\n\n if (!(await this.activeMemberForm.validate())) {\n Messager.error({message: \"请选择是否通过\"});\n return;\n }\n\n const response = await this.dataViewRequest.callDVRequest({\n action: \"active\",\n data: {\n id: _data.id,\n Memo: _data.memo,\n roles: _data.roles ?? [],\n approveResult: _data.valid.toString(),\n },\n });\n\n if (response?.data.code != 200) {\n Messager.error({message: response?.data.msg || \"请求失败\"});\n return;\n }\n\n this.activeDialog?.destroy()\n\n if (response?.data.data) {\n Dialoger.customRender({\n title: \"重置密码成功\",\n width: \"475px\",\n body: () => {\n return (\n <div class=\"flex\">\n <MKSvgIcon name=\"InfoFilled\" class=\"color-[#E6A23C] font-[20px] mr-2\"></MKSvgIcon>\n 你的新密码为:<MKText copy><span class=\"color-[#4090ee] font-[14px]\">{response.data.data}</span></MKText>\n </div>\n );\n }\n })\n } else {\n Messager.success({message: \"操作成功\"});\n }\n\n this.load();\n } catch (e) {\n console.error(e);\n Messager.error({message: \"网络异常\"});\n } finally {\n this.activeMemberForm.getLoadingManager().completeLoading();\n }\n }\n\n formatItem(item: MsMemberResult): MsMemberTableItem {\n return {\n ...item,\n roles:\n item.roles?.map((role) => ({\n id: role.id,\n name: role.name || \"\",\n desc: role.desc || \"\",\n })) ?? [],\n\n type: item.valid === 0 ? 1 : 3,\n };\n\n // return {\n // id: item.id,\n // name: item.name || \"\",\n // wechatNo: item.wechatNo || \"\",\n // nickName: item.nickName || \"\",\n // email: item.email || \"\",\n // phone: item.phone || \"\",\n // userName: item.userName || \"\",\n // avatar: item.avatar,\n // roles:\n // item.roles?.map((role) => ({\n // id: role.id,\n // name: role.name || \"\",\n // desc: role.desc || \"\",\n // })) ?? [],\n // // depts: item.depts?.map((department) => ({\n // // id: department.id,\n // // name: department.name || \"\",\n // // // memberID: department.memberID || null,\n // // pid: department.pid || null,\n // // })),\n // valid: item.valid,\n // isLock: item.isLock,\n // type: item.valid === 0 ? 1 : item.isLock === 1 ? 2 : 3,\n // errorCount: item.errorCount,\n // unlockDatetime: item.unlockDatetime,\n // };\n }\n}\n","import {\n AddButton,\n DataFormOptions,\n DataTable,\n DeleteButton,\n RefreshButton,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MsMember, MsMemberTable } from \"../ms-member\";\nimport { MsRole } from \"../ms-role\";\nimport MemberNickNameColumn from \"../ms-member/components/MemberNickNameColumn.tsx\";\n\nexport type MsMemberRole = {\n id: string;\n memberId: string;\n roleId: string;\n member: Omit<MsMember, \"roles\">;\n};\n\nexport class MsMemberRoleTable extends DataTable<MsMemberRole> {\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\n\n memberTable: MsMemberTable;\n\n currentRole: MsRole | null = null;\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberRoleTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n\n const memberRoleTable = this;\n\n this.memberTable = this.register(\n new (class extends MsMemberTable {\n async loadRequest(params: Record<string, any>) {\n return super.loadRequest(Object.assign({ excludeRoleIds:memberRoleTable.currentRole?.id ? [memberRoleTable.currentRole?.id]:[] },params));\n }\n })()\n );\n }\n\n setCurrentRole(role: MsRole | null) {\n\n const oldRole = this.currentRole;\n\n this.currentRole = role;\n this.memberTable.setList([]);\n\n if (!role) {\n this.setList([]);\n return;\n }\n\n this.useCondition((group) => {\n group.clear();\n group.addCondition(\"roleId\", \"=\", role.id);\n });\n\n if (oldRole) { this.load(); }\n }\n\n protected async initialize() {\n await super.initialize();\n\n await this.memberTable.init();\n\n this.dataFilter.afterReadyEvent.on(() => {\n this.memberTable.dataFilter.setReady();\n });\n\n this.memberTable.header.rightArea = [new RefreshButton()];\n\n const rolesColumn = this.memberTable.getColumn(\"roles\");\n if (rolesColumn) {\n rolesColumn.visible = false;\n }\n\n this.header.rightArea = [new RefreshButton(), new AddButton()];\n\n this.setColumns([\n new TableColumn({\n name: \"member.nickName\", label: \"名称\",align:\"left\",\n minWidth: \"300px\",\n componentInfo: {\n name: \"\",\n component: ({ row,column,index }:any)=>{\n return <MemberNickNameColumn row={row.member} column={column} index={index} />\n }\n },\n }),\n new TableActionColumn({\n buttons: [new DeleteButton()],\n }),\n ]);\n }\n}\n","import { DataForm, DataFormOptions, FormColumn, RefreshButton } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsMemberRoleForm extends DataForm {\n static [DATA_MODEL_NAME]: string = \"ms-member-role\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMemberRoleForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n // this.setColumns([\n // new FormColumn({\n // name: \"memberId\",\n // label: \"成员\",\n // componentInfo: \"MKFormDataTableSelect\",\n // componentProps: {\n // dataTable: this.memberTable,\n // labelFieldName: \"nickName\",\n // },\n // }),\n // ]);\n }\n\n // formatSubmitData(data: any) {\n // return {\n // ...data,\n // roleId: this.currentRole?.id!,\n // };\n // }\n}\n","import { DataForm, FormColumn } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, IP_PATTERN } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport type MsIPWhitelist = {\n id: string;\n ipAddress: string;\n};\n\nexport class MsIPWhitelistForm<T = MsIPWhitelist, F = T> extends DataForm<\n T,\n F\n> {\n static [DATA_MODEL_NAME]: string = \"ms-access-ip-whitelist\";\n\n constructor(options = {}) {\n super({\n name: MsIPWhitelistForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({\n name: \"ipAddress\",\n label: \"IP地址\",\n required: true,\n rules: [{ message: \"请输入正确的IP\", pattern: IP_PATTERN }],\n }),\n new FormColumn({\n name: \"createdAt\",\n label: \"创建时间\",\n componentInfo: \"MKFormDatePicker\",\n componentProps: {\n type: \"datetime\",\n },\n }),\n ]);\n }\n}\n","import {\n ActionButton,\n DataTable,\n DeleteButton,\n EditButton,\n TableActionColumn,\n TableColumn,\n Messager,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport { MsIPWhitelist } from \"./MsIPWhitelistForm\";\nimport { MSAppClient } from \"../../core\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\n\nexport class MsIPWhitelistTable<T = MsIPWhitelist, F = T> extends DataTable<\n T,\n F\n> {\n static [DATA_MODEL_NAME]: string = \"ms-access-ip-whitelist\";\n\n constructor(options = {}) {\n super({\n name: MsIPWhitelistTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({ name: \"ipAddress\", label: \"IP地址\" }),\n new TableColumn({ name: \"createdAt\", label: \"创建时间\" }),\n new TableActionColumn({\n width: \"180px\",\n buttons: [\n new EditButton(),\n new DeleteButton({ label: \"移除\" }),\n new ActionButton({\n label: \"禁用\",\n type: \"danger\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `disable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"禁用失败\",\n });\n return;\n }\n Messager.success({ message: \"禁用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 1,\n }),\n new ActionButton({\n label: \"启用\",\n type: \"success\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `enable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"启用失败\",\n });\n return;\n }\n Messager.success({ message: \"启用成功\" });\n\n this.load();\n },\n predicate: (row) => row.valid === 0,\n }),\n ],\n }),\n ]);\n }\n}\n","import {DataForm, FormColumn} from \"@maketribe/dm\";\nimport {DATA_MODEL_NAME, IP_PATTERN, MODULE_NAME} from \"../../constants\";\n\nexport type MsDenyIPAccessList = {\n id: string;\n ipAddress: string;\n};\n\nexport class MsDenyIPAccessListForm<\n T = MsDenyIPAccessList,\n F = T\n> extends DataForm<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-deny-access-ip-list\";\n\n constructor(options = {}) {\n super({\n name: MsDenyIPAccessListForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({name: \"id\", label: \"编号\"}),\n new FormColumn({\n name: \"ipAddress\",\n label: \"IP地址\",\n required: true,\n rules: [{message: \"请输入正确的IP\", pattern: IP_PATTERN}],\n }),\n ]);\n }\n}\n","import {\n ActionButton,\n DataTable,\n DeleteButton,\n EditButton,\n TableActionColumn,\n TableColumn,\n Messager,\n TableHeaderItem,\n RefreshButton,\n AddButton,\n} from \"@maketribe/dm\";\nimport {MsDenyIPAccessList} from \"./MsDenyIPAccessListForm\";\nimport {MSAppClient} from \"../../core\";\nimport {DATA_MODEL_NAME, MODULE_NAME} from \"../../constants\";\n\nexport class MsDenyIPAccessListTable<\n T = MsDenyIPAccessList,\n F = T\n> extends DataTable<T, F> {\n static [DATA_MODEL_NAME]: string = \"ms-deny-access-ip-list\";\n\n constructor(options = {}) {\n super({\n name: MsDenyIPAccessListTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.header.rightArea = [\n new RefreshButton(),\n new AddButton(),\n new TableHeaderItem({\n componentInfo: \"MKBatchOpt\",\n predicate: () =>\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\n }),\n ];\n\n this.setColumns([\n new TableColumn({name: \"ipAddress\", label: \"IP地址\"}),\n new TableColumn({name: \"createdAt\", label: \"创建时间\"}),\n new TableActionColumn({\n width: \"180px\",\n buttons: [\n new EditButton(),\n new DeleteButton({label: \"移除\"}),\n new ActionButton({\n label: \"禁用\",\n type: \"danger\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `disable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"禁用失败\",\n });\n return;\n }\n Messager.success({message: \"禁用成功\"});\n\n this.load();\n },\n predicate: (row) => row.valid === 1,\n }),\n new ActionButton({\n label: \"启用\",\n type: \"success\",\n handler: async (row) => {\n this.loadingManager.startLoading();\n\n const result = await this.dataViewRequest.callDVRequest({\n action: `enable/${row.id}`,\n });\n\n this.loadingManager.completeLoading();\n if (result.data.code !== 200) {\n Messager.error({\n message: result.data.msg || \"启用失败\",\n });\n return;\n }\n Messager.success({message: \"启用成功\"});\n\n this.load();\n },\n predicate: (row) => row.valid === 0,\n }),\n ],\n }),\n ]);\n }\n}\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, RegionLevel, MODULE_NAME } from \"../../constants\";\n\nexport type MsRegion = {\n id: string;\n code: string;\n desc: string;\n level: number;\n postalCode: string;\n firstchar: string;\n jianpin: string;\n pinyin: string;\n};\n\nexport class MsRegionForm extends DataForm<MsRegion> {\n static [DATA_MODEL_NAME]: string = \"ms-region\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsRegionForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"code\", label: \"地区编号\" }),\n new FormColumn({ name: \"desc\", label: \"描述\" }),\n new FormColumn({\n name: \"level\",\n label: \"层级\",\n componentInfo: \"MKFormDataSelect\",\n componentProps: {\n options: [\n { value: RegionLevel.Province, label: \"省份\" },\n { value: RegionLevel.City, label: \"城市\" },\n { value: RegionLevel.District, label: \"地区\" },\n { value: RegionLevel.Town, label: \"城镇\" },\n ],\n },\n }),\n new FormColumn({ name: \"postalCode\", label: \"邮政编码\" }),\n new FormColumn({ name: \"telAreaCode\", label: \"电话区号\" }),\n new FormColumn({ name: \"lat\", label: \"纬度\" }),\n new FormColumn({ name: \"lng\", label: \"经度\" }),\n new FormColumn({ name: \"firstchar\", label: \"首拼\" }),\n new FormColumn({ name: \"jianpin\", label: \"简拼\" }),\n new FormColumn({ name: \"pinyin\", label: \"拼音\" }),\n ]);\n }\n}\n","import {\n DataTable,\n DataTableOptions,\n FilterColumn,\n TableActionColumn,\n TableColumn,\n} from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, RegionLevel, MODULE_NAME } from \"../../constants\";\nimport { MsRegion } from \"./MsRegionForm\";\n\nexport class MsRegionTable extends DataTable<MsRegion> {\n static [DATA_MODEL_NAME]: string = \"ms-region\";\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRegionTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n this.dataFilter.setColumns([\n new FilterColumn({ name: \"code\", label: \"地区编号\" }),\n new FilterColumn({ name: \"desc\", label: \"描述\" }),\n new FilterColumn({ name: \"postalCode\", label: \"邮政编码\" }),\n new FilterColumn({ name: \"telAreaCode\", label: \"电话区号\" }),\n ]);\n\n this.setColumns([\n new TableColumn({ name: \"code\", label: \"地区编号\", width: \"120px\" }),\n new TableColumn({ name: \"desc\", label: \"描述\", minWidth: \"200px\" }),\n new TableColumn({\n name: \"level\",\n label: \"层级\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping: {\n [RegionLevel.Province]: \"省份\",\n [RegionLevel.City]: \"城市\",\n [RegionLevel.District]: \"地区\",\n [RegionLevel.Town]: \"城镇\",\n },\n },\n width: \"80px\",\n }),\n new TableColumn({\n name: \"postalCode\",\n label: \"邮政编码\",\n width: \"100px\",\n }),\n new TableColumn({\n name: \"telAreaCode\",\n label: \"电话区号\",\n width: \"100px\",\n }),\n new TableColumn({ name: \"firstchar\", label: \"首拼\", width: \"80px\" }),\n new TableColumn({ name: \"jianpin\", label: \"简拼\", width: \"150px\" }),\n new TableColumn({ name: \"pinyin\", label: \"拼音\", width: \"220px\" }),\n new TableActionColumn(),\n ]);\n }\n}\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\n\nexport type Department = {\n id: string;\n name: string;\n pid: string | null;\n};\n\nexport class DepartmentForm extends DataForm<Department> {\n constructor(options: DataFormOptions = {}) {\n super({ name: \"ms-dept\", ...options });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"id\", label: \"编号\" }),\n new FormColumn({ name: \"name\", label: \"名称\", required: true }),\n new FormColumn({ name: \"pid\", label: \"父部门ID\", visible: false }),\n ]);\n }\n\n formatSubmitData(data: any) {\n return {\n ...data,\n pid: data.pid || null,\n };\n }\n\n formatItem(item: Department): Department {\n return {\n id: item.id,\n name: item.name || \"\",\n pid: item.pid || null,\n };\n }\n}\n","import { DataTableOptions, TableColumn, DataTable } from \"@maketribe/dm\";\nimport { Department } from \"./DepartmentForm\";\nimport { DepartmentNode } from \"./DepartmentTree\";\n\nexport class DepartmentTable<\n T extends Department = Department,\n F extends Department = Department\n> extends DataTable<T, F> {\n constructor(options: DataTableOptions = {}) {\n super({\n pageSize: 0,\n pageSizes: [],\n name: \"ms-dept\",\n ...options,\n interfaceURL: {\n list: \"/ms/dv/ms-dept/allList\",\n ...options.interfaceURL,\n },\n });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"id\", label: \"编号\", visible: false }),\n new TableColumn({ name: \"name\", label: \"名称\" }),\n new TableColumn({ name: \"leader\", label: \"部门负责人\" }),\n ]);\n }\n\n setList(list: F[]): void {\n const rootDepartments: DepartmentNode[] = [];\n\n const departments = list as unknown as DepartmentNode[];\n\n for (const department of departments) {\n department.children = [];\n\n if (!department.pid) {\n rootDepartments.push(department);\n }\n\n for (const item of departments) {\n if (department.id === item.pid) {\n department.children.push(item);\n }\n }\n }\n\n super.setList(rootDepartments as unknown as F[]);\n }\n\n formatItem(item: T): F {\n return {\n id: item.id,\n name: item.name || \"\",\n pid: item.pid || null,\n } as F;\n }\n}\n\n","import { DataTree, DataTreeOptions } from \"@maketribe/dm\";\n\nimport { Department } from \"./DepartmentForm\";\n\nexport type DepartmentNode = Department & { children: DepartmentNode[] };\n\nexport class DepartmentTree<T extends DepartmentNode = DepartmentNode> extends DataTree<T> {\n\n constructor(options: DataTreeOptions = {}) {\n super({ name: \"ms-dept\", ...options, props: { label: \"name\", ...options.props }, });\n }\n\n async loadRequest(params: Record<string, any>) {\n const response = await super.loadRequest(params);\n\n const list = response.data.data;\n\n const rootDepartments: T[] = [];\n\n const departments = list;\n\n for (const department of departments) {\n department.children = [];\n\n if (!department.pid) {\n rootDepartments.push(department);\n }\n\n for (const item of departments) {\n if (department.id === item.pid) {\n department.children.push(item);\n }\n }\n }\n\n response.data.data = rootDepartments as T[];\n\n return response;\n }\n}\n\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\n\nexport class OperateLogTable extends DataTable {\n constructor(options: DataTableOptions = {}) {\n super({ name: \"ms-operate-log\", ...options });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"desc\", label: \"描述\" }),\n new TableColumn({ name: \"content\", label: \"内容\" }),\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\n ]);\n }\n}\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\nimport { LoginLogType } from \"../../../constants\";\n\nexport type LoginLogResult = {\n account: string;\n ipAddress: string;\n traceId: string;\n status: LoginLogType;\n clientId: string;\n};\n\nexport type LoginLog = LoginLogResult & {\n statusText: string;\n};\n\nexport class LoginLogTable extends DataTable<LoginLogResult, LoginLog> {\n constructor(options: DataTableOptions = {}) {\n super({ name: \"ms-memberlogin-record\", ...options });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({ name: \"account\", label: \"账号\", width: \"150px\" }),\n new TableColumn({ name: \"statusText\", label: \"状态\", width: \"100px\" }),\n new TableColumn({ name: \"ipAddress\", label: \"IP\", width: \"120px\" }),\n new TableColumn({ name: \"traceId\", label: \"链路编号\" }),\n new TableColumn({ name: \"clientId\", label: \"客户端编号\" }),\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\n ]);\n }\n\n formatItem(item: LoginLogResult): LoginLog {\n let statusText = \"\";\n\n switch (item.status) {\n case LoginLogType.SUCCESS:\n statusText = \"登录成功\";\n break;\n case LoginLogType.FAILURE:\n statusText = \"登录失败\";\n break;\n case LoginLogType.LOCK:\n statusText = \"账号锁定\";\n break;\n default:\n }\n\n return { ...item, clientId: item.clientId ?? \"\", statusText };\n }\n}\n","import { DataTable, DataTableOptions, TableColumn } from \"@maketribe/dm\";\n\nexport type RequestLog = {\n id: string;\n requestUrl: string;\n timeOperationElapsedMilliseconds: string;\n traceId: string;\n httpMethod: string;\n createdAt: string;\n isError: number;\n content: any;\n};\n\nexport class RequestLogTable extends DataTable<\n RequestLog,\n RequestLog & { contentText: string }\n> {\n constructor(options: DataTableOptions = {}) {\n super({ name: \"ms-request-log\", ...options });\n }\n\n protected async initialize() {\n await super.initialize();\n\n this.setColumns([\n new TableColumn({\n name: \"requestUrl\",\n label: \"请求地址\",\n }),\n new TableColumn({\n name: \"traceId\",\n label: \"链路编号\",\n }),\n new TableColumn({\n name: \"contentText\",\n label: \"内容\",\n componentInfo: \"MKColumnJson\",\n }),\n new TableColumn({\n name: \"timeOperationElapsedMilliseconds\",\n label: \"耗时(ms)\",\n }),\n new TableColumn({\n name: \"isError\",\n label: \"状态\",\n }),\n new TableColumn({\n name: \"httpMethod\",\n label: \"请求方法\",\n }),\n new TableColumn({ name: \"createdAt\", label: \"时间\" }),\n ]);\n }\n\n formatItem(item: RequestLog): RequestLog & { contentText: string } {\n let contentText = \"\";\n\n try {\n const content = JSON.parse(JSON.stringify(item.content || {}));\n\n if (typeof content.logReponseInfo.value === \"string\") {\n content.logReponseInfo.value = JSON.parse(content.logReponseInfo.value);;\n }\n\n contentText = JSON.stringify(content, null, 2);\n } catch (e) {\n console.error(e);\n }\n\n return {\n ...item,\n contentText,\n };\n }\n}\n\n","import { DataTree, DataTreeNode, DataTreeOptions } from \"@maketribe/dm\";\nimport { R, CancelToken } from \"@maketribe/request\";\nimport { Event } from \"@maketribe/utils\";\n\nexport type LocalLog = {\n name: string;\n path: string;\n isDirectory: boolean;\n children: LocalLog[];\n};\n\nexport class LocalLogTree extends DataTree<LocalLog> {\n constructor(options: DataTreeOptions = { props: { label: \"name\" } }) {\n super({ name: \"local-log\", props: { label: \"path\" }, ...options });\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n // this.afterInitdEvent.once(() => {\n // this.append(\n // this.createDataTreeNode({\n // name: \"root\",\n // path: \"/\",\n // isDirectory: true,\n // children: [],\n // })\n // );\n // });\n }\n\n // createDataTreeNode(data: LocalLog) {\n // const dataTreeNode: DataTreeNode<LocalLog> =\n // new (class extends DataTreeNode<LocalLog> {\n // get isLeaf() {\n // return !(this.data?.isDirectory ?? false);\n // }\n\n // protected async loadRequest(params: Record<string, any>) {\n // const response = await this.httpRequest.get<\n // R<LocalLog[]> & { totalRecCount: string }\n // >(\"/ms/system/local-log-dir-root\", {\n // params: { ...params, path: this.data!.path },\n // cancelToken: new CancelToken((cancel) => {\n // this.loadCancel = cancel;\n // }),\n // });\n\n // response.data.data = response.data.data.map((item) => ({\n // name: item.name,\n // path: item.path,\n // isDirectory: item.isDirectory,\n // children: [],\n // })) as LocalLog[];\n\n // this.loadCancel = null;\n\n // return response;\n // }\n // })({ name: this.name });\n\n // dataTreeNode.setTree(this);\n\n // dataTreeNode.setData(data);\n\n // return dataTreeNode;\n // }\n\n formatItem(item: LocalLog): LocalLog {\n return { ...item, children: [] };\n }\n}\n\n","import { DataForm, DataFormOptions, FormColumn } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { defineDataForm } from \"../../define-data-form\";\nimport { MsMemberTable } from \"../ms-member\";\n\nexport class MsMessageForm extends DataForm {\n static [DATA_MODEL_NAME]: string = \"message\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: MsMessageForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({\n name: \"senderId\", label: \"发送人\",\n componentInfo: \"MKFormDataTableSelect\",\n componentProps: {\n dataTable: this.register(new MsMemberTable()),\n labelFieldName: \"name\"\n }\n }),\n new FormColumn({ name: \"title\", label: \"发送标题\", required: true }),\n new FormColumn({\n name: \"content\", label: \"内容\",\n componentInfo: \"MKFormInput\",\n componentProps: {\n type: \"textarea\",\n autosize: {\n minRows: 5,\n maxRows: 20\n }\n }\n }),\n ]);\n }\n}\n","import { DataForm, DataFormOptions, FormColumn, Messager } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME, RegionLevel } from \"../../constants\";\nimport { MODULE_NAME } from \"../../constants\";\nimport { MsMemberTable } from \"../ms-member\";\nimport { MSAppClient } from \"../../core\";\nimport { MsRoleTable } from \"../ms-role\";\n\nexport class SendForm extends DataForm {\n static [DATA_MODEL_NAME]: string = \"message\";\n\n constructor(options: DataFormOptions = {}) {\n super({\n name: SendForm[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n this.httpRequest = MSAppClient.instance!.httpRequest;\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n this.setColumns([\n new FormColumn({ name: \"title\", label: \"发送标题\", required: true }),\n new FormColumn({\n name: \"content\", label: \"内容\",\n componentInfo: \"MKFormInput\",\n componentProps: {\n type: \"textarea\",\n autosize: {\n minRows: 5,\n maxRows: 20\n }\n }\n }),\n new FormColumn({\n name: \"broadcastRangeType\", label: \"消息类型\",\n componentInfo: \"MKFormDataSelect\",\n componentProps: {\n options: [{ value: 1, desc: \"指定成员\" }, { value: 2, desc: \"指定角色\" }]\n }, required: true,\n defaultValue: 1\n }),\n new FormColumn({\n name: \"broadcastRangeTargets\", label: \"收件人\",\n componentInfo: \"MKFormDataTableSelect\",\n componentProps: {\n dataTable: this.register(new MsMemberTable()),\n labelFieldName: \"name\",\n multiple: true\n }, required: true\n }),\n ]);\n\n\n this.formItemValueChangeEvent.on((data) => {\n if (data.formItem.name === \"broadcastRangeType\") {\n switch (data.data.value) {\n case 1:\n this.getColumn(\"broadcastRangeTargets\")!.componentProps.dataTable = this.register(new MsMemberTable());\n break;\n case 2:\n console.log(this.getColumn(\"broadcastRangeTargets\"));\n this.getColumn(\"broadcastRangeTargets\")!.componentProps.dataTable = this.register(new MsRoleTable());\n break;\n }\n\n }\n })\n }\n async addRequest(params: any) {\n return await this.httpRequest.post(\"/ms/dv/message/send\", this.data)\n }\n}\n","import {\n ActionButton,\n DataTable,\n DataTableOptions,\n FilterColumn,\n RefreshButton,\n TableActionColumn,\n TableColumn,\n TableHeaderItem,\n TableHeaderButton,\n Dialoger,\n Messager\n} from \"@maketribe/dm\";\nimport {DATA_MODEL_NAME, RegionLevel} from \"../../constants\";\nimport {MODULE_NAME} from \"../../constants\";\nimport {defineDataTable} from \"../../define-data-table\";\nimport {SendForm} from \"./SendForm\";\nimport {MSAppClient} from \"../../core\";\n\nexport class MsMessageTable extends DataTable {\n static [DATA_MODEL_NAME]: string = \"message\";\n\n private sendForm: SendForm;\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsMessageTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options,\n });\n this.httpRequest = MSAppClient.instance!.httpRequest;\n\n this.sendForm = this.register(new SendForm())\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n await this.sendForm.init();\n\n this.sendForm.submittedEvent.on(() => {\n this.load();\n })\n\n const result = await this.httpRequest.get(\"/ms/dv/message/types\")\n if (result.data.code != 200) {\n Messager.error({\n message: result.data.msg || '获取消息类型失败'\n })\n return;\n }\n\n\n this.header.rightArea = [new RefreshButton(), new TableHeaderButton({\n label: \"发送消息\",\n icon: \"Plus\",\n handle: () => {\n Dialoger.dataFormDialog({\n dataForm: this.sendForm\n })\n }\n })]\n\n this.setColumns([\n new TableColumn({name: \"senderId\", label: \"发送人\", width: \"120px\"}),\n new TableColumn({\n name: \"type\", label: \"消息类型\",\n componentInfo: \"MKColumnObjectMappingText\",\n componentProps: {\n mapping: result.data.data.reduce((res: any, cur: any) => {\n return {...res, [cur.value]: cur.desc}\n }, {})\n }\n }),\n new TableColumn({name: \"title\", label: \"标题\", width: \"120px\"}),\n new TableColumn({name: \"content\", label: \"内容\", minWidth: \"200px\"}),\n // new TableActionColumn(),\n ]);\n }\n}\n\n","import { Components, DataTable, DataTableOptions, Dialoger, Messager, Notificationer } from \"@maketribe/dm\";\nimport { DATA_MODEL_NAME } from \"../../constants\";\nimport { CancelToken, Group, R, ResponseConfig } from \"@maketribe/request\";\n\nexport class MsMessageNotifyTable extends DataTable {\n\n static components: Components = new Components();\n\n static [DATA_MODEL_NAME]: string = \"message-notify\";\n\n buttonGroup: Group;\n\n selectGroup: Group;\n\n constructor(options: DataTableOptions = {}) {\n super({ name: MsMessageNotifyTable[DATA_MODEL_NAME], moduleName: \"ms\", ...options });\n\n this.buttonGroup = new Group();\n this.selectGroup = new Group();\n }\n\n protected async initialize(): Promise<void> {\n await super.initialize();\n\n this.useCondition((defaultGroup) => {\n defaultGroup.addGroup(this.buttonGroup);\n defaultGroup.addGroup(this.selectGroup)\n });\n }\n\n async loadRequest(params: Record<string, any>): Promise<ResponseConfig<R<any[]> & { totalRecCount: string }>> {\n const response = await this.dataViewRequest.list<\n R<any[]> & { totalRecCount: string }\n >({\n name: \"message\",\n data: {\n pn: this.currentPage,\n pc: this.pageSize,\n ...this.getLoadParams(params),\n },\n cancelToken: new CancelToken((cancel) => {\n this.loadCancel = cancel;\n }),\n });\n\n this.loadCancel = null;\n\n return response;\n }\n\n handleNotification(notification: any) {\n const NotificationComponent = MsMessageNotifyTable.components.resolveComponent(notification.type.toString()) as any;\n\n if (NotificationComponent) {\n Notificationer.info({\n dangerouslyUseHTMLString: notification.dangerouslyUseHTMLString ?? false,\n message: <NotificationComponent.component notification={notification} />\n });\n }\n\n }\n\n setReadType(readType: string) {\n this.buttonGroup.clear();\n\n if (readType != 'all') {\n this.buttonGroup.addCondition(\"isRead\", \"=\", 1)\n }\n\n this.setCurrentPage(1);\n this.load();\n }\n\n setMessageType(messageType: string) {\n this.selectGroup.clear();\n\n if (messageType) {\n this.selectGroup.addCondition(\"type\", \"=\", messageType)\n }\n\n this.setCurrentPage(1);\n this.load();\n }\n\n async readAll() {\n const isConfirm = await Dialoger.confirm({\n title: \"提示\",\n message: \"确定将所有消息全部标记为已读吗?\",\n type: \"warning\"\n });\n\n if (!isConfirm) {\n return;\n }\n\n try {\n this.loadingManager.startLoading();\n\n const result = await this.httpRequest.post(\"/message/readAll\");\n if (result?.data.code !== 200) {\n Messager.error({ message: result?.data.msg || \"操作失败\" });\n return;\n }\n\n this.setCurrentPage(1);\n this.load();\n } catch (e) {\n console.error(e);\n\n throw e;\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n}\n","import {\n ActionButton,\n DataTable,\n DataTableOptions,\n Dialoger,\n Messager, RefreshButton,\n TableActionColumn,\n TableColumn, TableHeaderButton, TableHeaderItem\n} from \"@maketribe/dm\";\nimport {MKJsonEditor, MKSvgIcon} from \"../../components\";\nimport {DATA_MODEL_NAME, MODULE_NAME} from \"../../constants\";\nimport {ElScrollbar} from \"element-plus\";\n\n\nexport class MsRequestLogTable extends DataTable {\n\n static [DATA_MODEL_NAME]: string = \"request-log\"\n\n constructor(options: DataTableOptions = {}) {\n super({\n name: MsRequestLogTable[DATA_MODEL_NAME],\n moduleName: MODULE_NAME,\n ...options\n });\n }\n\n async initialize() {\n await super.initialize();\n\n this.selectionColumn.visible = false;\n\n this.header.rightArea = [\n new RefreshButton(),\n new TableHeaderButton({\n icon: \"clarity:export-solid-badged\",\n label: \"导出\",\n handle: async () => {\n try {\n this.loadingManager.startLoading()\n\n const response = await this.exportData();\n\n if (response.data.code !== 200) {\n Messager.error({message: response.data.msg})\n }\n } finally {\n Messager.error({message: \"网络异常\"});\n this.loadingManager.completeLoading();\n }\n }\n }),\n ]\n\n this.setColumns([\n new TableColumn({name: \"userName\", label: \"用户名\"}),\n new TableColumn({name: \"requestUrl\", label: \"请求地址\"}),\n new TableColumn({name: \"ipAddress\", label: \"用户IP\"}),\n new TableColumn({name: \"clientId\", label: \"客户端ID\"}),\n new TableColumn({name: \"traceId\", label: \"Trace ID\"}),\n new TableColumn({name: \"httpMethod\", label: \"请求方法\"}),\n new TableColumn({name: \"timeOperationElapsedMilliseconds\", label: \"耗时\"}),\n new TableColumn({\n name: \"isError\", label: \"是否成功\", componentInfo: {\n name: \"\",\n component: ({row}: any) => {\n console.log(row.isError);\n\n const icon = row.isError == 0 ? <MKSvgIcon name=\"mdi:success\"/> : <MKSvgIcon name=\"mdi:error\"/>;\n\n return <span class=\"font-size-[20px]\">{icon}</span>\n }\n }\n }),\n new TableActionColumn({\n buttons: [\n new ActionButton({\n label: \"查看内容\",\n handler: async (row) => {\n try {\n this.loadingManager.startLoading();\n\n const response = await this.dataViewRequest.load(row.id, {method: \"GET\"})\n\n if (response.data.code !== 200) {\n Messager.error({message: response.data.msg})\n return;\n }\n\n const content = response.data.data?.content;\n\n if (!content) {\n Messager.warning({message: \"没有获取到内容\"});\n return;\n }\n\n const contentString = JSON.stringify(content, null, 2);\n\n Dialoger.customRender({\n width: \"85%\",\n body: () => <ElScrollbar height=\"100%\">\n <MKJsonEditor disabled modelValue={contentString}/>\n </ElScrollbar>\n })\n\n } catch (e) {\n console.error(e);\n Messager.error({message: \"网络异常\"});\n } finally {\n this.loadingManager.completeLoading();\n }\n }\n })\n ]\n }),\n ]);\n }\n\n formatItem(item: any) {\n return {\n ...item,\n timeOperationElapsedMilliseconds: `${item.timeOperationElapsedMilliseconds / 1000}s`\n }\n }\n}\n","import {createRouter, createWebHashHistory, Router as VueRouter,} from \"vue-router\";\nimport {\n ACCESS_TOKEN_HEADER,\n DVQueryable,\n HttpRequest,\n R,\n WebHttpRequest,\n X_ACCESS_TOKEN_HEADER,\n} from \"@maketribe/request\";\nimport {Components, ComponentsCombine, IComponents} from \"@maketribe/dm\";\nimport {I18n} from \"@maketribe/locale\";\n\nimport {Event, md5} from \"@maketribe/utils\";\nimport {UserSession} from \"./UserSession\";\nimport {authBeforeEach} from \"../layouts/router\";\nimport {PageManager} from \"./PageManager\";\nimport {InternalMkModule, MkModule} from \"./MkModule\";\nimport {DataModelDefines} from \"./DataModelDefines\";\nimport {App} from \"vue\";\nimport {DATA_MODEL_NAME} from \"../constants\";\nimport {\n MsConfigForm,\n MsConfigTable,\n MsDenyIPAccessListForm,\n MsDenyIPAccessListTable,\n MsIPWhitelistForm,\n MsIPWhitelistTable,\n MsMaterialForm,\n MsMaterialGroupForm,\n MsMaterialGroupTree,\n MsMaterialTable,\n MsMemberForm,\n MsMemberTable,\n MsMenuForm,\n MsMenuTree,\n MsMessageForm,\n MsMessageNotifyTable,\n MsMessageTable,\n MsPermissionPointDefineForm,\n MsPermissionPointDefineTable,\n MsRegionForm,\n MsRegionTable,\n MsRequestLogTable,\n MsRoleForm,\n MsRoleTable,\n MsRouteForm,\n MsRouteTable\n} from \"../dataviews\";\n\nexport type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n};\n\nexport interface MSAppClientOptions {\n app: App;\n pageManager?: PageManager;\n projectName: string;\n httpRequest?: HttpRequest;\n origin: string;\n appID: string;\n logo?: string;\n locale?: string;\n vueRouter?: VueRouter;\n dataTableComponents?: IComponents;\n dataTableHeaderComponents?: IComponents;\n dataFormComponents?: IComponents;\n dataFilterComponents?: IComponents;\n whereFilterComponents?: IComponents;\n settings?: Record<string, any>\n}\n\nexport class MSAppClient {\n static instance: MSAppClient | null = null;\n\n origin: string = \"\";\n\n private _options: Required<MSAppClientOptions>;\n\n app: App;\n\n projectName: string;\n\n logo: string;\n\n appID: string;\n\n userSession: UserSession | null = null;\n\n httpRequest: HttpRequest;\n\n ready: boolean = false;\n\n initd: boolean = false;\n\n pageManager: PageManager;\n\n modules: MkModule[] = [];\n\n settings: Record<string, any>;\n\n /**\n * @deprecated\n * @description 使用 MSAppClient.instance.userSession.userInfo\n */\n get userInfo() {\n return this.userSession?.userInfo ?? null;\n }\n\n dataTableComponents: IComponents;\n dataTableHeaderComponents: IComponents;\n dataFormComponents: IComponents;\n dataFilterComponents: IComponents;\n whereFilterComponents: IComponents;\n i18n: I18n;\n\n vueRouter: VueRouter;\n\n beforeInitUserSessionEvent: Event<{ userSession: UserSession }> = new Event();\n\n userSessionChangeEvent: Event<{ userSession: UserSession | null }> =\n new Event();\n\n constructor(options: MSAppClientOptions) {\n this._options = this._normalizeOptions(options);\n\n this.app = options.app;\n\n this.appID = this._options.appID;\n\n this.logo = this._options.logo;\n\n this.projectName = options.projectName;\n\n this.settings = this._options.settings ?? {};\n this.dataTableComponents = this._options.dataTableComponents;\n this.dataTableHeaderComponents = this._options.dataTableHeaderComponents;\n this.dataFormComponents = this._options.dataFormComponents;\n this.dataFilterComponents = this._options.dataFilterComponents;\n this.whereFilterComponents = this._options.whereFilterComponents;\n this.i18n = I18n.instance;\n this.i18n.setCurrentLanguageName(this._options.locale);\n\n this.dataTableComponents = this._options.dataTableComponents;\n this.dataFormComponents = this._options.dataFormComponents;\n this.dataFilterComponents = this._options.dataFilterComponents;\n this.whereFilterComponents = this._options.whereFilterComponents;\n\n this.vueRouter = this._options.vueRouter;\n\n this.pageManager = this._options.pageManager;\n\n this.httpRequest = this._options.httpRequest;\n\n HttpRequest.appID = this.appID;\n HttpRequest.setDefaultHttpRequest(this.httpRequest);\n\n DVQueryable.setHttpRequest(this.httpRequest);\n }\n\n setUserSession(userSession: UserSession | null) {\n if (this.userSession) {\n this.userSession.dispose();\n }\n\n this.userSession = userSession;\n\n this.userSessionChangeEvent.emit({userSession});\n }\n\n private _normalizeOptions(\n options: MSAppClientOptions\n ): Required<MSAppClientOptions> {\n return {\n app: options.app,\n appID: options.appID,\n projectName: options.projectName,\n httpRequest: options.httpRequest ?? new WebHttpRequest(),\n origin: options.origin,\n logo: options.logo || \"\",\n locale: options.locale || \"zh-cn\",\n vueRouter: options.vueRouter ??\n createRouter({\n history: createWebHashHistory(),\n routes: [],\n }),\n settings: options.settings ?? {},\n pageManager: options.pageManager ?? new PageManager(),\n dataTableComponents: options.dataTableComponents ?? new Components(),\n dataTableHeaderComponents:\n options.dataTableHeaderComponents ?? new Components(),\n dataFormComponents: options.dataFormComponents ?? new Components(),\n dataFilterComponents: options.dataFilterComponents ?? new Components(),\n whereFilterComponents: options.whereFilterComponents ?? new Components(),\n };\n }\n\n getI18n() {\n return this.i18n;\n }\n\n getOptions() {\n return this._options;\n }\n\n async loadCurrentUserSession(options?: {\n accessToken: string;\n xAccessToken: string;\n }) {\n const userSession = (this.userSession = new UserSession({\n msAppClient: this,\n ...options,\n }));\n this.userSession = null;\n\n this.beforeInitUserSessionEvent.emit({userSession});\n const userSessionInitResult = await userSession.init();\n\n if (userSessionInitResult?.data.code !== 200) {\n userSession.dispose();\n return userSessionInitResult!;\n }\n\n this.setUserSession(userSession);\n }\n\n async init() {\n\n if (this.initd) { return; }\n\n const internalModules = this.modules.map((module) => {\n\n const internalModule = new InternalMkModule(this.app);\n\n module(internalModule);\n\n return internalModule;\n });\n\n const dataTableComponents = [];\n const dataFormComponents = [];\n const whereFilterComponents = [];\n const dataFilterComponents = [];\n\n DataModelDefines.instance.registerDataTableDefine(MsRequestLogTable[DATA_MODEL_NAME], MsRequestLogTable);\n\n // 注册配置相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsConfigTable[DATA_MODEL_NAME], MsConfigTable);\n DataModelDefines.instance.registerDataFormDefine(MsConfigForm[DATA_MODEL_NAME], MsConfigForm);\n\n // 注册黑名单相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsDenyIPAccessListTable[DATA_MODEL_NAME], MsDenyIPAccessListTable);\n DataModelDefines.instance.registerDataFormDefine(MsDenyIPAccessListForm[DATA_MODEL_NAME], MsDenyIPAccessListForm);\n\n // 注册白名单相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsIPWhitelistTable[DATA_MODEL_NAME], MsIPWhitelistTable);\n DataModelDefines.instance.registerDataFormDefine(MsIPWhitelistForm[DATA_MODEL_NAME], MsIPWhitelistForm);\n\n // 注册素材相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsMaterialTable[DATA_MODEL_NAME], MsMaterialTable);\n DataModelDefines.instance.registerDataFormDefine(MsMaterialForm[DATA_MODEL_NAME], MsMaterialForm);\n DataModelDefines.instance.registerDataTreeDefine(MsMaterialGroupTree[DATA_MODEL_NAME], MsMaterialGroupTree);\n DataModelDefines.instance.registerDataFormDefine(MsMaterialGroupForm[DATA_MODEL_NAME], MsMaterialGroupForm);\n\n // 注册成员相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsMemberTable[DATA_MODEL_NAME], MsMemberTable);\n DataModelDefines.instance.registerDataFormDefine(MsMemberForm[DATA_MODEL_NAME], MsMemberForm);\n\n // 注册菜单相关DataModel\n DataModelDefines.instance.registerDataTreeDefine(MsMenuTree[DATA_MODEL_NAME], MsMenuTree);\n DataModelDefines.instance.registerDataFormDefine(MsMenuForm[DATA_MODEL_NAME], MsMenuForm);\n DataModelDefines.instance.registerDataTableDefine(MsPermissionPointDefineTable[DATA_MODEL_NAME], MsPermissionPointDefineTable);\n DataModelDefines.instance.registerDataFormDefine(MsPermissionPointDefineForm[DATA_MODEL_NAME], MsPermissionPointDefineForm);\n DataModelDefines.instance.registerDataTableDefine(MsRouteTable[DATA_MODEL_NAME], MsRouteTable);\n DataModelDefines.instance.registerDataFormDefine(MsRouteForm[DATA_MODEL_NAME], MsRouteForm);\n\n // 注册省市区相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsRegionTable[DATA_MODEL_NAME], MsRegionTable);\n DataModelDefines.instance.registerDataFormDefine(MsRegionForm[DATA_MODEL_NAME], MsRegionForm);\n\n // 注册角色相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsRoleTable[DATA_MODEL_NAME], MsRoleTable);\n DataModelDefines.instance.registerDataFormDefine(MsRoleForm[DATA_MODEL_NAME], MsRoleForm);\n\n // 注册消息相关DataModel\n DataModelDefines.instance.registerDataTableDefine(MsMessageTable[DATA_MODEL_NAME], MsMessageTable);\n DataModelDefines.instance.registerDataTableDefine(MsMessageNotifyTable[DATA_MODEL_NAME], MsMessageNotifyTable);\n DataModelDefines.instance.registerDataFormDefine(MsMessageForm[DATA_MODEL_NAME], MsMessageForm);\n\n for (let internalModule of internalModules) {\n\n for (let item of internalModule.dataTableClasses) {\n DataModelDefines.instance.registerDataTableDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n for (let item of internalModule.dataFormClasses) {\n DataModelDefines.instance.registerDataFormDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n for (let item of internalModule.dataTreeClasses) {\n DataModelDefines.instance.registerDataTreeDefine(\n (item as any)[DATA_MODEL_NAME],\n item\n );\n }\n\n dataTableComponents.push(internalModule.dataTableComponents);\n dataFormComponents.push(internalModule.dataFormComponents);\n dataFilterComponents.push(internalModule.dataFilterComponents);\n whereFilterComponents.push(internalModule.whereFilterComponents);\n }\n\n this.dataTableComponents = new ComponentsCombine({\n componentsList: [...dataTableComponents, this.dataTableComponents],\n });\n this.dataFormComponents = new ComponentsCombine({\n componentsList: [...dataFormComponents, this.dataFormComponents],\n });\n this.dataFilterComponents = new ComponentsCombine({\n componentsList: [...dataFilterComponents, this.dataFilterComponents],\n });\n this.whereFilterComponents = new ComponentsCombine({\n componentsList: [...whereFilterComponents, this.whereFilterComponents],\n });\n\n this.vueRouter.beforeEach(async (to, from, next) => {\n\n const route = await authBeforeEach(this, to, from);\n\n // 标题\n (window as any).document.title = to.meta.title || this.projectName;\n\n if (route) {\n next(route);\n return;\n }\n\n next();\n });\n\n this.pageManager.init();\n this.pageManager.setMSAppClient(this);\n\n\n this.pageManager.addExtendsPage({\n name: \"dv/ms-material/list\",\n path: \"/sys/materials\",\n component: () => import(\"../pages/Material/index.vue\"),\n meta: {name: \"ms-material\"},\n });\n\n this.pageManager.addExtendsPage({\n name: \"dv/ms-role/single/list/dialog\",\n path: \"/sys/roles\",\n component: () => import(\"../pages/SysRole/index.vue\"),\n meta: {name: \"ms-role\"},\n });\n\n this.pageManager.addExtendsPage({\n name: \"dv/ms-role/permission\",\n path: \"/sys/roles/:id/permission\",\n component: () => import(\"../pages/SysRole/PermissionManage.vue\"),\n })\n\n this.pageManager.addExtendsPage({\n name: \"dv/local-log/single/tree/dialog\",\n path: \"/log/local\",\n component: () => import(\"../pages/local-log/index.vue\"),\n meta: {name: \"local-log\"},\n });\n\n this.pageManager.addExtendsPage({\n name: \"dv/ms-menu/list\",\n path: \"/sys/menus\",\n component: () => import(\"../pages/SysMenu/index.vue\"),\n meta: {name: \"ms-menu\"},\n });\n\n this.pageManager.addExtendsPage({\n name: \"icons/list\",\n path: \"/sys/icons\",\n component: () => import(\"../pages/icons/index.vue\"),\n });\n\n this.pageManager.addExtendsPage({\n name: \"dv/ms-todo/single/list/dialog\",\n path: \"/dv/todo\",\n component: () => import(\"../pages/to-do/index.vue\"),\n });\n\n for (let internalModule of internalModules) {\n for (let item of internalModule.normalPages) {\n this.pageManager.addNormalPage(item);\n }\n\n for (let item of internalModule.extendsPages) {\n this.pageManager.addExtendsPage(item);\n }\n }\n\n this.httpRequest.getInterceptors().response.use((config) => {\n if (config.data.code === 401) {\n this.userSession?.dispose();\n this.vueRouter.push({name: \"login\"});\n }\n return config;\n });\n\n this.initd = true;\n }\n\n /**\n * 登录\n * @param username\n * @param password\n * @param code\n */\n async login(username: string, password: string, code: string) {\n const response = await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/login\",\n method: \"POST\",\n data: {\n account: username,\n password: md5(`mkbl#${password}`),\n vCode: code,\n },\n });\n\n if (response.data.code === 200) {\n await this.loadCurrentUserSession({\n accessToken: response.headers[ACCESS_TOKEN_HEADER],\n xAccessToken: response.headers[X_ACCESS_TOKEN_HEADER],\n });\n }\n\n return response;\n }\n\n formatURL(url: string) {\n return url;\n }\n\n async resetPassword(username: string, code: string) {\n type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n };\n\n return await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/reset-password\",\n method: \"POST\",\n data: {account: username, vCode: code},\n });\n }\n\n async logout() {\n this.setUserSession(null);\n }\n\n async changePassword(password: string, newPassword: string, vCode: string) {\n type LoginResult = {\n account: string;\n email: string;\n nickName: string;\n avatarPath: string;\n };\n\n return await this.httpRequest.request<R<LoginResult>>({\n url: \"/ms/app/modify-password\",\n method: \"POST\",\n data: {\n password: md5(`mkbl#${password}`),\n newPassword: md5(`mkbl#${newPassword}`),\n vCode,\n },\n });\n }\n\n addModule(module: MkModule) {\n this.modules.push(module);\n }\n}\n","import { SkeletonMessageSender, IMessage } from \"@maketribe/dm\";\nimport { ElMessage } from \"element-plus\";\n\nexport class MessagerImpl extends SkeletonMessageSender<IMessage> {\n info(message: IMessage): void {\n ElMessage.info(message);\n }\n success(message: IMessage): void {\n ElMessage.success(message);\n }\n warning(message: IMessage): void {\n ElMessage.warning(message);\n }\n error(message: IMessage): void {\n ElMessage.error(message);\n }\n}\n","import { NotificationMessage, SkeletonMessageSender } from \"@maketribe/dm\";\nimport { ElNotification } from \"element-plus\";\n\nexport class NotificationerImpl extends SkeletonMessageSender<NotificationMessage> {\n info(message: NotificationMessage): void {\n ElNotification.info(message);\n }\n success(message: NotificationMessage): void {\n ElNotification.success(message);\n }\n warning(message: NotificationMessage): void {\n ElNotification.warning(message);\n }\n error(message: NotificationMessage): void {\n ElNotification.error(message);\n }\n}\n","import {\n DataForm,\n DataFormDialogOptions,\n DataTable,\n DataTableSelectDialogResult,\n DialogInstance,\n FormColumn,\n IDialogMessage,\n IDialogRenderOptions,\n ImportResultColField,\n Messager,\n SkeletonDialoger,\n TableActionColumn,\n} from \"@maketribe/dm\";\nimport { Event} from \"@maketribe/utils\";\nimport { ElButton, ElMessageBox, ElScrollbar, ElTableColumn, ElTable, ElUpload, UploadUserFile } from \"element-plus\";\nimport { isFunction } from \"lodash-es\";\nimport { MKDataForm, MKDataTable, MKForm } from \"../../components\";\nimport { Fragment, reactive } from \"vue\";\nimport { I18n } from \"@maketribe/locale\";\nimport \"./data-table-select-dialog.scss\"\n\nlet uid = 0;\n\nexport class DialogerImpl extends SkeletonDialoger {\n dialogInstanceCreateEvent: Event<DialogInstance> = new Event();\n\n async prompt(options: IDialogMessage): Promise<string> {\n const promptResult = await ElMessageBox.prompt(\n options.message,\n options.title,\n options\n );\n\n return promptResult.value;\n }\n\n async confirm(options: IDialogMessage): Promise<boolean> {\n try {\n await ElMessageBox.confirm(options.message, options.title, options);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n async alert(options: IDialogMessage): Promise<void> {\n await ElMessageBox.alert(options.message, options.title, options);\n }\n\n customRender(options: IDialogRenderOptions): DialogInstance {\n let visible = true;\n\n const dialogInstance: DialogInstance = {\n class: \"\",\n ...options,\n id: uid++,\n get visible() {\n return visible;\n },\n set visible(v) {\n visible = v;\n dialogInstance.visibleChangeEvent.emit(visible);\n },\n visibleChangeEvent: new Event(),\n destroyEvent: new Event(),\n destroy: () => {\n dialogInstance.visible = false;\n dialogInstance.destroyEvent.emit();\n },\n };\n this.dialogInstanceCreateEvent.emit(dialogInstance);\n\n return dialogInstance;\n }\n\n async custom(options: IDialogRenderOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const dialogInstance = this.customRender({\n ...options,\n onConfirm: async () => {\n if (\n isFunction(options.onConfirm)\n ? (await options.onConfirm()) === false\n : false\n ) {\n return false;\n }\n\n dialogInstance.destroy();\n\n resolve(true);\n },\n onCancel: async () => {\n if (\n isFunction(options.onCancel)\n ? (await options.onCancel()) === false\n : false\n ) {\n return false;\n }\n\n dialogInstance.destroy();\n\n resolve(false);\n },\n });\n });\n }\n\n async dataTableSelectDialog(dataTable: DataTable): Promise<DataTableSelectDialogResult> {\n\n dataTable = reactive(dataTable) as DataTable;\n\n dataTable.afterInitdEvent.once(() => {\n // 过滤掉操作列\n const columns = dataTable\n .getColumns()\n .filter((column) => column.name !== TableActionColumn.actionColumnName);\n dataTable.setColumns(columns);\n });\n\n return new Promise((resolve) => {\n const handleConfirm = () => {\n resolve({ isConfirm: true, selections: dataTable.getSelection() });\n\n dataTable.setList([]);\n dataTable.setSelection([]);\n\n dialogInstance.destroy();\n };\n\n const handleCancel = () => {\n resolve({ isConfirm: false, selections: [] });\n\n dialogInstance.destroy();\n };\n\n const dialogInstance = this.customRender({\n class: \"mk-data-table-select-dialog\",\n width: \"80%\",\n title:dataTable.title ?? \"选择\",\n body: () => {\n return (\n <div class=\"mk-data-table-select-dialog__main\">\n <MKDataTable dataTable={dataTable} selection />\n </div>\n );\n },\n footer: () => {\n return (\n <Fragment>\n <ElButton\n type=\"primary\"\n onClick={handleConfirm}\n disabled={dataTable.getSelection().length === 0}\n >\n 确定\n </ElButton>\n <ElButton onClick={handleCancel}>取消</ElButton>\n </Fragment>\n );\n },\n });\n });\n }\n\n async dataFormDialog(\n dataFormOptions: DataFormDialogOptions\n ): Promise<DialogInstance> {\n return new Promise((resolve) => {\n const dataForm = reactive(dataFormOptions.dataForm) as DataForm;\n\n let title = \"\";\n\n if (dataFormOptions.customDataFormStatus !== true) {\n if (dataFormOptions.recId) {\n dataForm.editRecord(dataFormOptions.recId);\n } else {\n dataForm.addRecord();\n }\n\n title = dataFormOptions.recId ? \"编辑\" : \"新增\";\n }\n\n const dialogInstance = this.customRender({\n title: dataFormOptions.title ?? title,\n onClose: () => {\n dataForm.cancel();\n\n dialogInstance.destroy();\n },\n body: () => {\n return (\n <ElScrollbar max-height=\"550px\">\n <MKDataForm dataForm={dataForm}>\n <MKForm dataForm={dataForm} />\n </MKDataForm>\n </ElScrollbar>\n );\n },\n\n footer: () => {\n return (\n <Fragment>\n <ElButton\n type=\"primary\"\n disabled={!dataForm.isChanged}\n loading={!dataForm.allowSubmit}\n onClick={async () => {\n if (!(await dataForm.validate())) {\n return;\n }\n\n if (await dataForm.simpleSubmit()) {\n dialogInstance.destroy();\n }\n }}\n >\n {dataFormOptions.confirmText ?? I18n.instance.translate(\"mk.dataForm.saveButton\")}\n </ElButton>\n <ElButton\n onClick={() => {\n dataForm.cancel();\n\n dialogInstance.destroy();\n }}\n >\n {dataFormOptions.cancelText ?? I18n.instance.translate(\"mk.dataForm.cancelButton\")}\n </ElButton>\n </Fragment>\n );\n },\n });\n\n resolve(dialogInstance);\n });\n }\n async importDataFormDialog(\n dataFormOptions: DataFormDialogOptions, template: string\n ): Promise<DialogInstance> {\n return new Promise((resolve) => {\n const dataForm = reactive(dataFormOptions.dataForm) as DataForm;\n\n let title = \"\";\n dataForm.afterInitdEvent.once(() => {\n dataForm.addColumn(\n new FormColumn({\n name: \"postFiles\",\n label: \"文件\",\n required: true,\n componentInfo: {\n name: \"postFiles\",\n component: () => {\n const fileSelectHandle = async (file: any, fileList: any) => {\n dataForm.data.postFiles = file.raw;\n Messager.success({ message: \"上传成功\" })\n }\n\n return (<div style={{ display: \"flex\" }}>\n <ElUpload accept=\".xls,.xlsx\" autoUpload={false} limit={1} onChange={fileSelectHandle}>\n <ElButton type=\"primary\" >上传文件</ElButton>\n </ElUpload>\n </div>)\n }\n }\n }),\n )\n if (template) {\n dataForm.addColumn(new FormColumn({\n name: \"template\",\n label: \"模板下载\",\n componentInfo: {\n name: \"template\",\n component: () => {\n const downloadHandle = () => {\n const a = document.createElement(\"a\");\n a.style.display = \"none\";\n document.body.appendChild(a);\n a.href = template;\n a.click();\n document.body.removeChild(a);\n }\n return <ElButton onClick={downloadHandle} type=\"primary\">点击下载</ElButton>\n }\n }\n }))\n }\n })\n\n\n if (dataFormOptions.customDataFormStatus !== true) {\n if (dataFormOptions.recId) {\n dataForm.editRecord(dataFormOptions.recId);\n } else {\n dataForm.addRecord();\n }\n title = dataFormOptions.recId ? \"编辑\" : \"新增\";\n }\n\n const dialogInstance = this.customRender({\n title: dataFormOptions.title ?? title,\n onClose: () => {\n dataForm.cancel();\n\n dialogInstance.destroy();\n },\n body: () => {\n return (\n <ElScrollbar max-height=\"550px\">\n <MKDataForm dataForm={dataForm}>\n <MKForm dataForm={dataForm} />\n </MKDataForm>\n </ElScrollbar>\n );\n },\n\n footer: () => {\n return (\n <Fragment>\n <ElButton\n type=\"primary\"\n disabled={!dataForm.isChanged}\n loading={!dataForm.allowSubmit}\n onClick={async () => {\n if (!(await dataForm.validate())) {\n return;\n }\n\n if (await dataForm.simpleSubmit()) {\n dialogInstance.destroy();\n }\n }}\n >\n {dataFormOptions.confirmText ?? I18n.instance.translate(\"mk.dataForm.saveButton\")}\n </ElButton>\n <ElButton\n onClick={() => {\n dataForm.cancel();\n\n dialogInstance.destroy();\n }}\n >\n {dataFormOptions.cancelText ?? I18n.instance.translate(\"mk.dataForm.cancelButton\")}\n </ElButton>\n </Fragment>\n );\n },\n });\n\n resolve(dialogInstance);\n });\n }\n\n importResultTableDialog(data: any, filed: ImportResultColField[]) {\n return this.customRender({\n title: \"导入结果\",\n body: () => {\n const cols = filed.map((item) => {\n return (<ElTableColumn prop={item.name} label={item.label}></ElTableColumn>)\n })\n\n var successSlot = {\n default: (data: any) => {\n return data.row.isSuccess ? <span style=\"color: green\">成功</span> : <span style=\"color: red\">失败</span>\n }\n }\n\n return (\n <ElTable data={data} style={{ height: \"550px\" }}>\n {cols}\n <ElTableColumn label=\"结果\" prop=\"isSuccess\" width=\"80px\" v-slots={successSlot}>\n </ElTableColumn>\n <ElTableColumn label=\"失败原因\" prop=\"reason\" ></ElTableColumn>\n </ElTable>\n )\n }\n })\n }\n}\n","import { Plugin,createVNode,render } from \"vue\";\nimport { makeInstaller } from \"@maketribe/utils\";\nimport { Dialoger, Messager, Notificationer } from \"@maketribe/dm\";\nimport { DialogerImpl, MessagerImpl, NotificationerImpl } from \"./core/message\";\nimport {\n ConfigProviderContext,\n MKConfigProvider,\n MKDataForm,\n MKDataTable,\n MKSvgIcon,\n provideGlobalConfig,\n MKDataTableSelect,\n MKPagination,\n MKDataTablePagination,\n MKUploadFile,\n MKUploadImage,\n MKUploadVideo,\n MKPagePanel,\n MKTableHeaderItem,\n MKTable,\n MKTableView,\n MKForm,\n MKFormView,\n MKDialogs\n} from \"./components\";\n\nconst components: Plugin[] = [\n MKConfigProvider,\n MKDataForm,\n MKDataTable,\n MKSvgIcon,\n MKDataTableSelect,\n MKPagination,\n MKDataTablePagination,\n MKPagePanel,\n MKUploadFile,\n MKUploadImage,\n MKUploadVideo,\n MKTableHeaderItem,\n MKTable,\n MKTableView,\n MKForm,\n MKFormView\n];\n\nexport const installer = makeInstaller<ConfigProviderContext>(\n components,\n \"4.0\",\n (app, version, options) => {\n if (options) {\n provideGlobalConfig(options, app, true);\n }\n\n Messager.implInstance = new MessagerImpl();\n Dialoger.implInstance = new DialogerImpl();\n Notificationer.implInstance = new NotificationerImpl();\n\n // 注册通用的 dialog\n const dialogContainer = document.createElement('div');\n const appContext = app._context;\n const vnode = createVNode(MKDialogs);\n vnode.appContext = appContext;\n \n //渲染\n render(vnode, dialogContainer);\n document.body.appendChild(dialogContainer);\n }\n);\n","<script setup lang=\"ts\">\nimport useSettingsStore from \"../../store/modules/settings.ts\";\nimport {MSAppClient} from \"../../../core\";\n\ndefineOptions({\n name: \"Logo\",\n});\n\nconst props = withDefaults(\n defineProps<{\n showLogo?: boolean;\n showTitle?: boolean;\n }>(),\n {\n showLogo: true,\n showTitle: true,\n }\n);\n\nconst settingsStore = useSettingsStore();\n\nconst msAppClient = MSAppClient.instance!\n\n// const title = ref(import.meta.env.VITE_APP_TITLE);\n// TODO\n// const title = ref(\"码客部落\");\nconst title = computed(() => msAppClient.projectName);\n\n// TODO\n// const logo = ref('/favicon.ico');\nconst logo = computed(() => msAppClient.logo);\n\nconst to = computed(() =>\n settingsStore.settings.home.enable ? settingsStore.settings.home.fullPath : \"\"\n);\n\nconst visible = computed(() => {\n if (props.showLogo && unref(logo)) {\n return true;\n }\n\n return !!(props.showTitle && unref(title));\n});\n</script>\n\n<template>\n <RouterLink\n v-if=\"visible\"\n :to=\"to\"\n class=\"h-[var(--g-sidebar-logo-height)] w-inherit flex-center gap-2 px-3 text-inherit no-underline\"\n :class=\"{ 'cursor-pointer': settingsStore.settings.home.enable }\"\n :title=\"title\"\n >\n <img\n v-if=\"showLogo && logo\"\n :src=\"logo\"\n class=\"logo h-[35px] w-[35px] object-contain\"\n />\n <span v-if=\"showTitle && title\" class=\"block truncate font-bold\">{{ title }}</span>\n </RouterLink>\n</template>\n","import mitt from 'mitt'\n\ninterface MittTypes {\n [key: string | symbol]: any\n 'global-search-toggle'?: 'menu' | 'tab'\n}\n\nexport default mitt<MittTypes>()\n","<template>\n <kbd class=\"mr-[4px] h-6 min-w-[24px] inline-flex items-center justify-center rounded bg-stone-1 px-1 text-[12px] text-dark font-medium font-sans ring-1 ring-stone-3 ring-inset last:mr-0 dark-bg-dark-9 dark-text-white dark-ring-stone-7\">\n <slot />\n </kbd>\n</template>\n","<script setup lang=\"ts\">\nimport eventBus from \"../../../../utils/eventBus.ts\";\nimport useSettingsStore from \"../../../../store/modules/settings.ts\";\nimport HKbd from \"../../../Kbd/index.vue\";\n\ndefineOptions({\n name: \"ToolbarRightSide\",\n});\n\nconst settingsStore = useSettingsStore();\n</script>\n\n<template>\n <span\n class=\"flex-center cursor-pointer px-2 py-1\"\n @click=\"eventBus.emit('global-search-toggle')\"\n >\n <MKSvgIcon v-if=\"settingsStore.mode === 'mobile'\" name=\"i-ri:search-line\"/>\n <span\n v-else\n class=\"group inline-flex cursor-pointer items-center gap-1 whitespace-nowrap rounded-2 bg-stone-1 px-2 py-1.5 text-dark ring-stone-3 ring-inset transition dark-bg-stone-9 dark-text-white hover-ring-1 dark-ring-stone-7\"\n >\n <MKSvgIcon name=\"i-ri:search-line\"/>\n <span\n class=\"text-sm text-stone-5 transition group-hover-text-dark dark-group-hover-text-white\"\n >\n 搜索\n </span>\n <HKbd v-if=\"settingsStore.settings.navSearch.enableHotkeys\" class=\"ml-2\"\n >\n {{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }} S\n </HKbd>\n </span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { useFullscreen } from '@vueuse/core'\nimport useSettingsStore from '../../../../store/modules/settings.ts'\n\ndefineOptions({\n name: 'Fullscreen',\n})\n\nconst settingsStore = useSettingsStore()\n\nconst { isFullscreen, toggle } = useFullscreen()\n</script>\n\n<template>\n <div class=\"relative mx-1 h-full py-3\" v-if=\"settingsStore.mode === 'pc'\">\n <div class=\"h-full w-full flex cursor-pointer items-center justify-between gap-1 px-1 text-[var(--g-header-menu-color)]\n transition-all hover-bg-[var(--g-header-menu-hover-bg)] hover-text-[var(--g-header-menu-hover-color)]\" style=\"border-radius: 0.2em;\">\n <span class=\"flex-center cursor-pointer px-2 py-1\" @click=\"toggle\">\n <MKSvgIcon :name=\"isFullscreen ? 'i-ri:fullscreen-exit-line' : 'i-ri:fullscreen-line'\" :size=\"18\" />\n </span>\n </div>\n </div>\n\n</template>\n","<template>\n <ElDrawer class=\"mk-message\" title=\"通知消息\" v-model=\"isVisible as any\" v-if=\"isVisible\" append-to-body>\n <div class=\"mk-message__header\">\n <ElButtonGroup class=\"mk-message__header-buttonGroup\">\n <ElButton size=\"small\"\n :class=\"[buttonName == 'all' ? 'active' : '', 'mk-message__header-buttonGroup-button']\"\n @click=\"() => { buttonName = 'all' }\">\n 全部\n </ElButton>\n <ElButton size=\"small\"\n :class=\"[buttonName == 'unRead' ? 'active' : '', 'mk-message__header-buttonGroup-button']\"\n @click=\"() => { buttonName = 'unRead' }\">未读\n </ElButton>\n </ElButtonGroup>\n <ElSelect placeholder=\"请选择类型\" size=\"small\" v-model=\"selectValue\" clearable>\n <ElOption value=\"1\" label=\"测试\"></ElOption>\n </ElSelect>\n <ElButton link type=\"primary\" size=\"small\" @click=\"readAllHandle\">全部已读</ElButton>\n </div>\n <MKDataTable :data-table=\"messageNotifyTable\" class=\"flex-1 h-0\">\n <ElScrollbar class=\"mk-message__body\" @scroll=\"load\">\n <div v-for=\"item in messageNotifyTable.getList()\" class=\"mk-message__body-item\"\n :class=\"{ 'is-read': item.isRead }\"\n :key=\"item.id\" @click=\"messageType.find((a) => a.type == item.type)?.actions(item)\">\n <div class=\"mk-message__body-item-header\">\n {{ item.title }}\n </div>\n <div class=\"mk-message__body-item-content\">\n {{ item.content }}\n </div>\n <div class=\"mk-message__body-item-footer\">\n <ElTag>{{ messageType.find((a) => a.type == item.type)?.name }}</ElTag>\n {{ item.createdAt }}\n </div>\n </div>\n </ElScrollbar>\n </MKDataTable>\n </ElDrawer>\n</template>\n<script setup lang=\"ts\">\nimport {ElButtonGroup, ElDrawer, ElButton, ElSelect, ElScrollbar, ElTag, ElMessage} from \"element-plus\";\nimport {MKDataTable} from \"../../../../../components\";\nimport {ref, computed, Ref, watch} from \"vue\";\nimport {MsMessageNotifyTable} from '../../../../../dataviews';\n\nconst props = defineProps({\n visible: {\n type: Boolean,\n default: false,\n },\n messageNotifyTable: {\n type: MsMessageNotifyTable,\n required: true,\n }\n});\n\nconst buttonName = ref('all');\nconst selectValue = ref('');\n\nconst messageType = ref([\n {\n type: 1,\n name: \"类型1\",\n actions: (row: any) => {\n console.log(row, \"类型1\");\n }\n },\n {\n type: 2,\n name: \"类型2\",\n actions: (row: any) => {\n console.log(row, \"类型2\");\n }\n }\n])\n\nconst types: Ref<any[]> = ref([]);\n\nconst load = async (scroll: { scrollTop: number }) => {\n\n const messageNotifyTable = props.messageNotifyTable!;\n\n if (messageNotifyTable.loading) {\n return;\n }\n\n const dom = document.querySelector(\".mk-message__body\")!.children[0] as HTMLElement;\n if (dom.scrollHeight - dom.offsetHeight - scroll.scrollTop < 300) {\n\n messageNotifyTable.setCurrentPage(messageNotifyTable.currentPage + 1);\n }\n}\n\nconst emit = defineEmits([\"update:visible\"]);\n\nconst isVisible: Ref<Boolean> = computed({\n get() {\n return props.visible;\n },\n set(value: Boolean) {\n emit(\"update:visible\", value);\n }\n});\n\n//将未读全部变成已读\nconst readAllHandle = async () => {\n props.messageNotifyTable?.readAll();\n}\n\n//筛选选中的消息类型\nwatch(selectValue, (selectValue) => {\n props.messageNotifyTable?.setMessageType(selectValue);\n});\n\n//根据当前选择的是全部还是未读\nwatch(buttonName, async (buttonName) => {\n props.messageNotifyTable?.setReadType(buttonName);\n})\n\n</script>\n<style lang='scss'></style>\n\n<style lang='scss' scoped>\n.mk-message {\n &__header {\n display: flex;\n gap: 10px;\n flex-shrink: 0;\n\n &-buttonGroup {\n display: flex;\n\n &-button.active {\n background-color: #e9ecf1;\n }\n }\n }\n\n &__body {\n margin-top: 20px;\n\n &-item {\n display: flex;\n flex-direction: column;\n color: #000;\n position: relative;\n cursor: pointer;\n user-select: none;\n\n &::before {\n position: absolute;\n content: \"\";\n display: block;\n width: 2px;\n height: 100%;\n background-color: #1490ff;\n margin-right: 10px;\n }\n\n &-header {\n font-size: 16px;\n padding-left: 30px;\n margin-bottom: 10px;\n }\n\n &-content {\n margin-bottom: 10px;\n font-size: 14px;\n padding-left: 30px;\n }\n\n &-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n color: #999;\n padding-left: 30px;\n }\n }\n\n .is-read {\n &::before {\n background-color: #999;\n }\n }\n\n .el-scrollbar__wrap {\n padding-right: 10px;\n\n .el-scrollbar__view {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n }\n }\n\n .el-drawer__body {\n display: flex;\n flex-direction: column;\n }\n}\n</style>\n","import {ElBadge} from \"element-plus\";\nimport {MKSvgIcon} from \"../../../../../components/basic/SvgIcon\";\nimport {defineComponent, onMounted, ref, Ref, unref} from \"vue\";\nimport MessageList from \"./message-list.vue\"\nimport * as SignalR from \"@microsoft/signalr\"\nimport {HttpTransportType} from \"@microsoft/signalr\"\nimport { DataModelDefines, MSAppClient } from \"../../../../../core\"\nimport {MsMessageNotifyTable} from '../../../../../dataviews';\n\n\nexport const MKMessage = defineComponent({\n name: \"MKMessage\",\n setup() {\n\n const messageNotifyTable =\n reactive(DataModelDefines.instance.getDataTable(\"message-notify\")!) as unknown as MsMessageNotifyTable;\n\n const showMessageList: Ref<boolean> | undefined = ref(false)\n const num: Ref<number> = ref(0)\n\n //signalR连接\n const connection = new SignalR.HubConnectionBuilder()\n .withUrl(\"/api/ms/hubs/notification\", {\n accessTokenFactory: () => {\n const accessToken = localStorage.getItem(\"access-token\") as string;\n console.log(accessToken);\n return accessToken;\n },\n transport: HttpTransportType.LongPolling\n })\n //自动连接\n .withAutomaticReconnect({\n nextRetryDelayInMilliseconds: function (val) {\n // _this.$TF.closeLoading()\n let arr = [1000, 5000, 10000, 30000]\n if (val.previousRetryCount <= 3) {\n return arr[val.previousRetryCount]\n } else {\n return arr[3]\n }\n }\n })\n .build();\n\n //接收消息\n connection.on('Notification', messageNotifyTable.handleNotification.bind(messageNotifyTable));\n\n const start = async () => {\n console.log(\"start\");\n try {\n await connection.start();\n console.log(\"SignalR Connected.\");\n } catch (err) {\n console.log(err);\n setTimeout(start, 5000);\n }\n };\n\n connection.onclose(async () => {\n await start();\n });\n\n //Start the connection.启动\n start();\n\n const getUnreadMessageNum = async () => {\n const httpRequest = MSAppClient.instance!.httpRequest\n const result = await httpRequest.get(\"/ms/dv/message/unread/count\")\n if (result.data.code == 200) {\n num.value = result.data.data\n }\n\n }\n onMounted(() => {\n getUnreadMessageNum();\n })\n return () => {\n const messageIcon = <MKSvgIcon name=\"ep:message\" class=\"mk-header__tools-message\"\n onClick={() => (showMessageList.value = true)}/>;\n const toolItem = num.value ? <ElBadge value={num.value}>{messageIcon}</ElBadge> : messageIcon\n\n return (<div>\n <div class=\"font-size-0\">\n {toolItem}\n </div>\n <MessageList visible={unref(showMessageList)} messageNotifyTable={messageNotifyTable}\n onUpdate:visible={((v: any) => (showMessageList.value = v)) as any}>\n\n </MessageList>\n </div>)\n }\n }\n})\n","import useSettingsStore from '../../store/modules/settings.ts'\nimport useMenuStore from '../../store/modules/menu.ts'\n\nexport default function useMenu() {\n const router = useRouter()\n\n const settingsStore = useSettingsStore()\n const menuStore = useMenuStore()\n\n function switchTo(index: number | string) {\n\n menuStore.setActived(index)\n\n if (settingsStore.settings.menu.switchMainMenuAndPageJump) {\n router.push(menuStore.sidebarMenusFirstDeepestPath)\n }\n }\n\n return {\n switchTo,\n }\n}\n","<script setup lang=\"ts\">\nimport { ClickOutside as vClickOutside } from 'element-plus'\nimport NavSearch from \"./NavSearch/index.vue\";\nimport Fullscreen from \"./Fullscreen/index.vue\";\nimport eventBus from \"../../../utils/eventBus.ts\";\nimport useSettingsStore from \"../../../store/modules/settings.ts\";\nimport { useMSAppClient } from \"../../../../composables\";\nimport Message from './Message';\nimport useMenuStore from \"../../../store/modules/menu.ts\";\nimport {MKSvgIcon} from \"../../../../components\";\nimport useMenu from \"../../../utils/composables/useMenu\"\n\ndefineOptions({ name: \"Tools\" });\n\nconst router = useRouter();\n\nconst menuStore = useMenuStore();\n\nconst {switchTo} = useMenu();\nconst settingsStore = useSettingsStore();\nconst appClient = useMSAppClient();\n\nconst userInfo = computed(() => unref(appClient).userInfo);\n\nconst avatarError = ref(false);\n\n// 退出登录\nconst handleLogout = () => {\n\n unref(appClient).logout();\n\n router.push({name: \"login\"});\n};\n\n\n</script>\n\n<template>\n <div class=\"flex items-center h-full\">\n <NavSearch v-if=\"settingsStore.settings.toolbar.navSearch\"/>\n <Fullscreen v-if=\"settingsStore.settings.toolbar.fullscreen\"/>\n <Message v-if=\"settingsStore.settings.toolbar?.message\"/>\n\n <el-popover class=\"h-full py-2\" placement=\"bottom-start\" v-if=\"userInfo\" :width=\"240\" trigger=\"click\">\n <template #reference>\n <div class=\"relative mx-1 h-full py-3\">\n <div class=\"h-full w-full flex cursor-pointer items-center justify-between gap-1 px-1 text-[var(--g-header-menu-color)]\n transition-all hover-bg-[var(--g-header-menu-hover-bg)] hover-text-[var(--g-header-menu-hover-color)]\" style=\"border-radius: 0.2em;\">\n <el-avatar :size=\"28\" shape=\"square\" fit=\"fill\" :src=\"userInfo.avatar\" @error=\"() => (avatarError = true)\">\n <div v-if=\"avatarError || !userInfo.avatar\" class=\"bg-[#0289ff] w-full h-full flex items-center justify-center\">\n <span>\n {{ userInfo.account.substring(0,2).toUpperCase() }}\n </span>\n </div>\n </el-avatar>\n <span v-if=\" userInfo.nickName \" class=\"m-l-2\">\n {{ userInfo.nickName }}\n </span>\n <MKSvgIcon name=\"i-ep:caret-bottom\" class=\"m-l-2 color-[#7bb1fa]\" />\n </div>\n </div>\n </template>\n <div>\n <div class=\" mx-1 py-2 flex items-start\">\n <el-avatar :size=\"40\" shape=\"square\" fit=\"fill\" :src=\"userInfo.avatar\" @error=\"() => (avatarError = true)\">\n <div v-if=\"avatarError || !userInfo.avatar\" class=\"bg-[#0289ff] w-full h-full flex items-center justify-center\">\n <span>\n {{ userInfo.account.substring(0,2).toUpperCase() }}\n </span>\n </div>\n </el-avatar>\n <div class=\"ml-2\">\n <h3 class=\"m-0\">{{userInfo.account}}</h3>\n <span v-if=\"userInfo.email\" class=\"color-[#333]\">\n {{userInfo.email}}\n </span>\n </div>\n </div>\n <div v-if=\"userInfo.isSuper\" class=\"flex gap-2 flex-wrap\">\n <el-tag type=\"primary\">\n 超级管理员\n </el-tag>\n </div>\n <div v-else-if=\"userInfo.roles\" class=\"flex gap-2 flex-wrap\">\n <el-tag type=\"primary\" v-for=\"role in userInfo.roles\">\n {{role.desc}}\n </el-tag>\n </div>\n <el-divider style=\"margin: 10px 0\" />\n <div>\n <!-- <el-dropdown-item v-if=\" settingsStore.mode == 'pc'\" @click=\"() => eventBus.emit('global-hotkeys-intro-toggle')\">快捷键介绍</el-dropdown-item>-->\n <template v-if=\" settingsStore.mode === 'pc' && settingsStore.settings.menu.mode === 'head' \" v-for=\"(item, index) in settingsStore.settings.toolbar.shortcutMenus\" :key=\"index\">\n <div class=\"w-full el-button user-action-item el-button--primary is-text gap-2\" style=\"justify-content: start\" @click=\"item.handler\" v-if=\"item.meta?.type == '3'\">\n <MKSvgIcon v-if=\"item?.icon\" :name=\"item?.icon\" />\n {{typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title}}\n </div>\n </template>\n <template v-if=\" settingsStore.mode === 'pc' && settingsStore.settings.menu.mode === 'head' \" v-for=\"(item, index) in menuStore.allMenus\" :key=\"index\">\n <div class=\"w-full el-button user-action-item el-button--primary is-text gap-2\" style=\"justify-content: start\" @click=\"switchTo(index)\" v-if=\"item.meta?.type == '3'\">\n <MKSvgIcon v-if=\"item.meta?.icon\" :name=\"item.meta?.icon\" />\n {{typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title}}\n </div>\n </template>\n <div class=\"w-full el-button user-action-item el-button--danger is-text mx-0 gap-2\" style=\"justify-content: start\" @click=\"handleLogout\">\n <MKSvgIcon name=\"ep:switch-button\" />\n 退出登录\n </div>\n </div>\n </div>\n </el-popover>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n.user-action-item{\n margin-left: 0 !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport Logo from \"../Logo/index.vue\";\nimport ToolbarRightSide from \"../Topbar/Toolbar/rightSide.vue\";\nimport useMenuStore from \"../../store/modules/menu.ts\";\nimport useSettingsStore from \"../../store/modules/settings.ts\";\nimport useMenu from \"../../utils/composables/useMenu\"\n\ndefineOptions({\n name: \"LayoutHeader\",\n});\n\nconst settingsStore = useSettingsStore();\nconst menuStore = useMenuStore();\n\nconst { switchTo } = useMenu();\n\nconst menuRef = ref();\n\n// 顶部模式鼠标滚动\nfunction handlerMouserScroll(event: WheelEvent) {\n if (event.deltaY || event.detail !== 0) {\n menuRef.value.scrollBy({\n left: (event.deltaY || event.detail) > 0 ? 50 : -50,\n });\n }\n}\n</script>\n\n<template>\n <Transition name=\"header\">\n <header\n v-if=\"\n settingsStore.mode === 'pc' &&\n settingsStore.settings.menu.mode === 'head'\n \"\n >\n <div class=\"header-container\">\n <Logo class=\"title\" />\n <div\n ref=\"menuRef\"\n class=\"menu-container\"\n @wheel.prevent=\"handlerMouserScroll\"\n >\n <!-- 顶部模式 -->\n <div class=\"menu h-full flex of-hidden transition-all\">\n <template v-for=\"(item, index) in menuStore.allMenus\" :key=\"index\">\n <div v-if=\"item.meta?.type != '3'\"\n class=\"menu-item relative mx-1 py-3 transition-all\"\n :class=\"{\n active: index === menuStore.actived,\n }\"\n >\n <div\n v-if=\"item.children && item.children.length !== 0\"\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-3 text-[var(--g-header-menu-color)] transition-all hover-bg-[var(--g-header-menu-hover-bg)] hover-text-[var(--g-header-menu-hover-color)]\"\n :class=\"{\n 'text-[var(--g-header-menu-active-color)]! bg-[var(--g-header-menu-active-bg)]!':\n index === menuStore.actived,\n }\"\n :title=\"\n typeof item.meta?.title === 'function'\n ? item.meta?.title()\n : item.meta?.title\n \"\n @click=\"switchTo(index)\"\n >\n <div\n class=\"inline-flex flex-1 items-center justify-center gap-1\"\n >\n <MKSvgIcon\n v-if=\"item.meta?.icon\"\n :name=\"item.meta?.icon\"\n />\n <span\n class=\"w-full flex-1 truncate text-sm transition-height transition-opacity transition-width\"\n >\n {{\n typeof item.meta?.title === \"function\"\n ? item.meta?.title()\n : item.meta?.title\n }}\n </span>\n </div>\n </div>\n </div>\n </template>\n </div>\n </div>\n <ToolbarRightSide />\n </div>\n </header>\n\n </Transition>\n</template>\n\n<style lang=\"scss\" scoped>\nheader {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 2000;\n display: flex;\n align-items: center;\n width: 100%;\n height: var(--g-header-height);\n padding: 0 20px;\n margin: 0 auto;\n color: var(--g-header-color);\n background-color: var(--g-header-bg);\n box-shadow: -1px 0 0 0 var(--g-border-color), 1px 0 0 0 var(--g-border-color),\n 0 1px 0 0 var(--g-border-color);\n transition: background-color 0.3s;\n\n .header-container {\n display: flex;\n gap: 30px;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n margin: 0 auto;\n\n :deep(a.title) {\n position: relative;\n flex: 0;\n width: inherit;\n height: inherit;\n padding: inherit;\n background-color: inherit;\n\n .logo {\n width: initial;\n height: 40px;\n }\n\n span {\n font-size: 20px;\n color: var(--g-header-color);\n letter-spacing: 1px;\n }\n }\n\n .menu-container {\n flex: 1;\n height: 100%;\n padding: 0 20px;\n overflow-x: auto;\n mask-image: linear-gradient(\n to right,\n transparent,\n #000 20px,\n #000 calc(100% - 20px),\n transparent\n );\n\n // firefox隐藏滚动条\n scrollbar-width: none;\n\n // chrome隐藏滚动条\n &::-webkit-scrollbar {\n display: none;\n }\n\n .menu {\n display: inline-flex;\n height: 100%;\n\n :deep(.menu-item) {\n .menu-item-container {\n color: var(--g-header-menu-color);\n border-radius: 0.2em;\n\n &:hover {\n color: var(--g-header-menu-hover-color);\n background-color: var(--g-header-menu-hover-bg);\n }\n\n .menu-item-container-icon {\n font-size: 20px !important;\n }\n }\n\n &.active .menu-item-container {\n color: var(--g-header-menu-active-color);\n background-color: var(--g-header-menu-active-bg);\n }\n }\n }\n }\n }\n}\n\n// 头部动画\n.header-enter-active,\n.header-leave-active {\n transition: transform 0.3s;\n}\n\n.header-enter-from,\n.header-leave-to {\n transform: translateY(calc(var(--g-header-height) * -1));\n}\n</style>\n","<script setup lang=\"ts\">\nimport Logo from \"../Logo/index.vue\";\nimport useSettingsStore from \"../../store/modules/settings.ts\";\nimport useMenuStore from \"../../store/modules/menu.ts\";\nimport useMenu from \"../../utils/composables/useMenu\"\n\ndefineOptions({\n name: \"MainSidebar\",\n});\n\nconst router = useRouter();\n\nconst settingsStore = useSettingsStore();\nconst menuStore = useMenuStore();\n\nconst {switchTo} = useMenu();\n\nwatch(computed(() => unref(router.currentRoute)), (currentRoute) => {\n // 导航栏如果不是 single 模式,则需要根据 path 定位主导航的选中状态\n settingsStore.settings.menu.mode !== 'single' && menuStore.setActived(currentRoute.name as string);\n}, {immediate: true});\n\n</script>\n\n<template>\n <Transition name=\"main-sidebar\">\n <div\n v-if=\"\n settingsStore.settings.menu.mode === 'side' ||\n (settingsStore.mode === 'mobile' && settingsStore.settings.menu.mode !== 'single')\n \"\n class=\"main-sidebar-container\"\n >\n <Logo :show-title=\"false\" class=\"sidebar-logo\"/>\n <div class=\"menu\">\n <!-- 侧边栏模式(含主导航) -->\n <div class=\"w-full flex flex-col of-hidden py-1 transition-all -mt-2\">\n <template v-for=\"(item, index) in menuStore.allMenus\" :key=\"index\">\n <div\n class=\"menu-item relative px-2 py-1 transition-all\"\n :class=\"{\n active: index === menuStore.actived,\n system:item.meta?.type == '3'\n }\"\n >\n <div v-if=\"item.children && item.children.length !== 0\"\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 py-4 text-[var(--g-main-sidebar-menu-color)] transition-all hover-bg-[var(--g-main-sidebar-menu-hover-bg)] hover-text-[var(--g-main-sidebar-menu-hover-color)] px-2!\"\n :class=\"{\n 'text-[var(--g-main-sidebar-menu-active-color)]! bg-[var(--g-main-sidebar-menu-active-bg)]!':\n index === menuStore.actived,\n }\"\n :title=\" typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title\"\n @click=\"switchTo(index)\"\n >\n <div class=\"w-full inline-flex flex-1 flex-col items-center justify-center gap-[2px]\">\n <MKSvgIcon v-if=\"item.meta?.icon\" :name=\"item.meta?.icon\" class=\"menu-item-container-icon transition-transform\" />\n <span\n class=\"w-full flex-1 truncate text-center transition-height transition-opacity transition-width font-size-[12px]\"\n >\n<!-- <span-->\n <!-- class=\"w-full flex-1 truncate text-center text-sm transition-height transition-opacity transition-width\"-->\n <!-- >-->\n {{ typeof item.meta?.title === \"function\" ? item.meta?.title() : item.meta?.title }}\n </span>\n </div>\n </div>\n </div>\n </template>\n </div>\n </div>\n </div>\n </Transition>\n</template>\n\n<style lang=\"scss\" scoped>\n.main-sidebar-container {\n position: relative;\n z-index: 1;\n display: flex;\n flex-direction: column;\n width: var(--g-main-sidebar-width);\n color: var(--g-main-sidebar-menu-color);\n background-color: var(--g-main-sidebar-bg);\n transition: background-color 0.3s, color 0.3s, box-shadow 0.3s;\n\n .sidebar-logo {\n background-color: var(--g-main-sidebar-bg);\n transition: background-color 0.3s;\n }\n\n .menu {\n flex: 1;\n width: initial;\n overflow: hidden auto;\n overscroll-behavior: contain;\n position: relative;\n\n // firefox隐藏滚动条\n scrollbar-width: none;\n\n // chrome隐藏滚动条\n &::-webkit-scrollbar {\n display: none;\n }\n\n :deep(.menu-item) {\n &.system{\n position: absolute;\n bottom: 10px;\n width: 100%;\n }\n .menu-item-container {\n padding-block: 8px;\n color: var(--g-main-sidebar-menu-color);\n border-radius: 0.4em;\n\n &:hover {\n color: var(--g-main-sidebar-menu-hover-color);\n background-color: var(--g-main-sidebar-menu-hover-bg);\n }\n\n .menu-item-container-icon {\n font-size: 20px !important;\n }\n }\n\n &.active .menu-item-container {\n color: var(--g-main-sidebar-menu-active-color) !important;\n background-color: var(--g-main-sidebar-menu-active-bg) !important;\n }\n }\n }\n}\n\n// 主侧边栏动画\n.main-sidebar-enter-active,\n.main-sidebar-leave-active {\n transition: 0.3s;\n}\n\n.main-sidebar-enter-from,\n.main-sidebar-leave-to {\n transform: translateX(calc(var(--g-main-sidebar-width) * -1));\n}\n</style>\n","import type { Menu } from '../../../typings/global'\nimport { InjectionKey } from 'vue'\n\nexport interface MenuItem {\n index: string\n indexPath: string[]\n active?: boolean\n}\n\nexport interface MenuProps {\n menu: Menu.recordRaw[]\n value: string\n accordion?: boolean\n defaultOpeneds?: string[]\n mode?: 'horizontal' | 'vertical'\n collapse?: boolean\n showCollapseName?: boolean\n}\n\nexport interface MenuInjection {\n props: MenuProps\n items: Record<string, MenuItem>\n subMenus: Record<string, MenuItem>\n activeIndex: MenuProps['value']\n openedMenus: string[]\n mouseInMenu: string[]\n isMenuPopup: boolean\n openMenu: (index: string, indexPath: string[]) => void\n closeMenu: (index: string | string[]) => void\n handleMenuItemClick: (index: string) => void\n handleSubMenuClick: (index: string, indexPath: string[]) => void\n}\n\nexport const rootMenuInjectionKey = Symbol('rootMenu') as InjectionKey<MenuInjection>\n\nexport interface SubMenuProps {\n uniqueKey: string[]\n menu: Menu.recordRaw\n level?: number\n}\n\nexport interface SubMenuItemProps {\n uniqueKey: string[]\n item: Menu.recordRaw\n level?: number\n subMenu?: boolean\n expand?: boolean\n}\n","<script setup lang=\"ts\">\n// import type { SubMenuItemProps } from './types'\nimport {rootMenuInjectionKey} from './types.ts'\nimport type {Menu} from \"../../../typings/global\";\n\ndefineOptions({\n name: 'SubMenuItem',\n})\n\nexport interface SubMenuItemProps {\n uniqueKey: string[]\n item: Menu.recordRaw\n level?: number\n subMenu?: boolean\n expand?: boolean\n}\n\n\nconst props = withDefaults(\n defineProps<SubMenuItemProps>(),\n {\n level: 0,\n subMenu: false,\n expand: false,\n },\n)\n\nconst rootMenu = inject(rootMenuInjectionKey)!\n\nconst itemRef = ref<HTMLElement>()\n\nconst isActived = computed(() => {\n return props.subMenu\n ? rootMenu.subMenus[props.uniqueKey.at(-1)!].active\n : rootMenu.activeIndex === props.uniqueKey.at(-1)!\n})\n\nconst isItemActive = computed(() => {\n return isActived.value && (!props.subMenu || rootMenu.isMenuPopup)\n})\n\n// 缩进样式\nconst indentStyle = computed(() => {\n return !rootMenu.isMenuPopup\n ? `padding-left: ${20 * (props.level ?? 0)}px`\n : ''\n})\n\ndefineExpose({\n ref: itemRef,\n})\n</script>\n\n<template>\n <div\n ref=\"itemRef\" class=\"menu-item relative transition-all\" :class=\"{\n 'active': isItemActive,\n 'py-1 px-2': (rootMenu.isMenuPopup && rootMenu.props.mode === 'vertical') || (rootMenu.isMenuPopup && level !== 0 && rootMenu.props.mode === 'horizontal') || !rootMenu.isMenuPopup,\n 'px-1 py-2': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'horizontal',\n }\"\n >\n <router-link v-slot=\"{ href, navigate }\" custom :to=\"item.path || (uniqueKey.at(-1) && item.meta && !item.group ? { name: uniqueKey.at(-1) } : '')\">\n <component :is=\"subMenu ? 'div' : 'a'\" v-bind=\"{\n ...(!subMenu && {\n href: item.meta?.link ? item.meta.link : href,\n target: item.meta?.link ? '_blank' : '_self',\n class: 'no-underline',\n }),\n }\"\n class=\"group menu-item-container h-full w-full flex cursor-pointer items-center justify-between gap-1 px-4 py-3 text-[var(--g-sub-sidebar-menu-color)] transition-all hover-bg-[var(--g-sub-sidebar-menu-hover-bg)] hover-text-[var(--g-sub-sidebar-menu-hover-color)]\"\n :class=\"{\n 'text-[var(--g-sub-sidebar-menu-active-color)]! bg-[var(--g-sub-sidebar-menu-active-bg)]!': isItemActive,\n 'px-3!': rootMenu.isMenuPopup && level === 0,\n }\" :title=\"typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title\" v-on=\"{\n ...(!subMenu && {\n click: navigate,\n }),\n }\"\n >\n <div\n class=\"inline-flex flex-1 items-center justify-center gap-[12px]\" :class=\"{\n 'flex-col': rootMenu.isMenuPopup && level === 0 && rootMenu.props.mode === 'vertical',\n 'gap-1!': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,\n 'w-full': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName && rootMenu.props.mode === 'vertical',\n }\" :style=\"indentStyle\"\n >\n <MKSvgIcon v-if=\"props.item.meta?.icon\" :name=\"props.item.meta.icon\" :size=\"18\"\n class=\"menu-item-container-icon transition-transform\"/>\n <span\n v-if=\"!(rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName)\"\n class=\"w-0 flex-1 truncate text-sm transition-height transition-opacity transition-width\"\n :class=\"{\n 'opacity-0 w-0 h-0': rootMenu.isMenuPopup && level === 0 && !rootMenu.props.showCollapseName,\n 'w-full text-center': rootMenu.isMenuPopup && level === 0 && rootMenu.props.showCollapseName,\n }\"\n >\n {{ typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title }}\n </span>\n </div>\n <i\n v-if=\"subMenu && !(rootMenu.isMenuPopup && level === 0)\"\n class=\"relative ml-1 w-[10px] after:absolute after:h-[1.5px] after:w-[6px] after:bg-current after:transition-transform-200 after:content-empty after:-translate-y-[1px] before:absolute before:h-[1.5px] before:w-[6px] before:bg-current before:transition-transform-200 before:content-empty before:-translate-y-[1px]\"\n :class=\"[\n expand ? 'before:-rotate-45 before:-translate-x-[2px] after:rotate-45 after:translate-x-[2px]' : 'before:rotate-45 before:-translate-x-[2px] after:-rotate-45 after:translate-x-[2px]',\n rootMenu.isMenuPopup && level === 0 && 'opacity-0',\n rootMenu.isMenuPopup && level !== 0 && '-rotate-90 -top-[1.5px]',\n ]\"\n />\n </component>\n<!-- <el-tooltip :disabled=\"rootMenu.isMenuPopup && level === 0 && !subMenu\"-->\n<!-- :content=\"typeof item.meta?.title === 'function' ? item.meta?.title() : item.meta?.title\" placement=\"right\"-->\n<!-- class=\"h-full w-full\">-->\n<!-- -->\n<!-- </el-tooltip>-->\n </router-link>\n </div>\n</template>\n<style lang=\"postcss\" scoped>\n.menu-item-container{\n border-radius: 0.2em;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTimeoutFn } from '@vueuse/core'\nimport type { OverlayScrollbarsComponentRef } from 'overlayscrollbars-vue'\nimport { OverlayScrollbarsComponent } from 'overlayscrollbars-vue'\nimport Item from './item.vue'\n// import type { SubMenuProps } from './types'\nimport { rootMenuInjectionKey } from './types.ts'\nimport type {Menu} from \"../../../typings/global\";\n\ndefineOptions({\n name: 'SubMenu',\n})\n\nexport interface SubMenuProps {\n uniqueKey: string[]\n menu: Menu.recordRaw\n level?: number\n}\n\nconst props = withDefaults(\n defineProps<SubMenuProps>(),\n {\n level: 0,\n },\n)\n\nconst index = props.menu.name as string// ?? JSON.stringify(props.menu)\nconst itemRef = shallowRef()\nconst subMenuRef = shallowRef<OverlayScrollbarsComponentRef>()\nconst rootMenu = inject(rootMenuInjectionKey)!\n\nconst opened = computed(() => {\n return rootMenu.openedMenus.includes(props.uniqueKey.at(-1)!)\n})\n\nconst transitionEvent = computed(() => {\n return rootMenu.isMenuPopup\n ? {\n enter(el: HTMLElement) {\n if (el.offsetHeight > window.innerHeight) {\n el.style.height = `${window.innerHeight}px`\n }\n },\n afterEnter: () => {},\n beforeLeave: (el: HTMLElement) => {\n el.style.overflow = 'hidden'\n el.style.maxHeight = `${el.offsetHeight}px`\n },\n leave: (el: HTMLElement) => {\n el.style.maxHeight = '0'\n },\n afterLeave(el: HTMLElement) {\n el.style.overflow = ''\n el.style.maxHeight = ''\n },\n }\n : {\n enter(el: HTMLElement) {\n const memorizedHeight = el.offsetHeight\n el.style.maxHeight = '0'\n el.style.overflow = 'hidden'\n void el.offsetHeight\n el.style.maxHeight = `${memorizedHeight}px`\n },\n afterEnter(el: HTMLElement) {\n el.style.overflow = ''\n el.style.maxHeight = ''\n },\n beforeLeave(el: HTMLElement) {\n el.style.overflow = 'hidden'\n el.style.maxHeight = `${el.offsetHeight}px`\n },\n leave(el: HTMLElement) {\n el.style.maxHeight = '0'\n },\n afterLeave(el: HTMLElement) {\n el.style.overflow = ''\n el.style.maxHeight = ''\n },\n }\n})\n\nconst transitionClass = computed(() => {\n return rootMenu.isMenuPopup\n ? {\n enterActiveClass: 'ease-in-out duration-300',\n enterFromClass: 'opacity-0 translate-x-4',\n enterToClass: 'opacity-100',\n leaveActiveClass: 'ease-in-out duration-300',\n leaveFromClass: 'opacity-100',\n leaveToClass: 'opacity-0',\n }\n : {\n enterActiveClass: 'ease-in-out duration-300',\n enterFromClass: 'opacity-0',\n enterToClass: 'opacity-100',\n leaveActiveClass: 'ease-in-out duration-300',\n leaveFromClass: 'opacity-100',\n leaveToClass: 'opacity-0',\n }\n})\n\nconst hasChildren = computed(() => {\n let flag = true\n if (props.menu.children) {\n if (props.menu.children.every((item: any) => item.meta?.menu === false)) {\n flag = false\n }\n }\n else {\n flag = false\n }\n return flag\n})\n\nfunction handleClick() {\n if (rootMenu.isMenuPopup && hasChildren.value) {\n return\n }\n if (hasChildren.value) {\n rootMenu.handleSubMenuClick(index, props.uniqueKey)\n }\n else {\n rootMenu.handleMenuItemClick(index)\n }\n}\n\nlet timeout: (() => void) | undefined\n\nfunction handleMouseenter() {\n if (!rootMenu.isMenuPopup) {\n return\n }\n rootMenu.mouseInMenu = props.uniqueKey\n timeout?.()\n ;({ stop: timeout } = useTimeoutFn(() => {\n if (hasChildren.value) {\n rootMenu.openMenu(index, props.uniqueKey)\n nextTick(() => {\n const el = itemRef.value.ref\n let top = 0\n let left = 0\n if (rootMenu.props.mode === 'vertical' || props.level !== 0) {\n top = el.getBoundingClientRect().top + el.scrollTop\n left = el.getBoundingClientRect().left + el.getBoundingClientRect().width\n if (top + subMenuRef.value!.getElement()!.offsetHeight > window.innerHeight) {\n top = window.innerHeight - subMenuRef.value!.getElement()!.offsetHeight\n }\n }\n else {\n top = el.getBoundingClientRect().top + el.getBoundingClientRect().height\n left = el.getBoundingClientRect().left\n if (top + subMenuRef.value!.getElement()!.offsetHeight > window.innerHeight) {\n subMenuRef.value!.getElement()!.style.height = `${window.innerHeight - top}px`\n }\n }\n if (left + subMenuRef.value!.getElement()!.offsetWidth > document.documentElement.clientWidth) {\n left = el.getBoundingClientRect().left - el.getBoundingClientRect().width\n }\n subMenuRef.value!.getElement()!.style.top = `${top}px`\n subMenuRef.value!.getElement()!.style.left = `${left}px`\n })\n }\n else {\n const path = props.menu.children ? rootMenu.subMenus[index].indexPath.at(-1)! : rootMenu.items[index].indexPath.at(-1)!\n rootMenu.openMenu(path, rootMenu.subMenus[path].indexPath)\n }\n }, 300))\n}\n\nfunction handleMouseleave() {\n if (!rootMenu.isMenuPopup) {\n return\n }\n rootMenu.mouseInMenu = []\n timeout?.()\n ;({ stop: timeout } = useTimeoutFn(() => {\n if (rootMenu.mouseInMenu.length === 0) {\n rootMenu.closeMenu(props.uniqueKey)\n }\n else {\n if (hasChildren.value) {\n !rootMenu.mouseInMenu.includes(props.uniqueKey.at(-1)!) && rootMenu.closeMenu(props.uniqueKey.at(-1)!)\n }\n }\n }, 300))\n}\n</script>\n\n<template>\n <Item ref=\"itemRef\" :unique-key=\"uniqueKey\" :item=\"menu\" :level=\"level\" :sub-menu=\"hasChildren\" :expand=\"opened\"\n @click=\"handleClick\" @mouseenter=\"handleMouseenter\" @mouseleave=\"handleMouseleave\" />\n <Teleport v-if=\"hasChildren\" to=\"body\" :disabled=\"!rootMenu.isMenuPopup\">\n <Transition v-bind=\"transitionClass\" v-on=\"transitionEvent\">\n <OverlayScrollbarsComponent\n v-if=\"opened\" ref=\"subMenuRef\" :options=\"{ scrollbars: { visibility: 'hidden' } }\" defer class=\"sub-menu\" :class=\"{\n 'bg-[var(--g-sub-sidebar-bg)]': rootMenu.isMenuPopup,\n 'ring-1 ring-stone-2 dark-ring-stone-8 shadow-xl fixed z-3000 w-[200px]': rootMenu.isMenuPopup,\n 'mx-1': rootMenu.isMenuPopup && (rootMenu.props.mode === 'vertical' || level !== 0),\n 'py-1': rootMenu.isMenuPopup,\n }\"\n >\n <template v-for=\"item in menu.children\" :key=\"item.name!\">\n <SubMenu v-if=\"item.meta?.menu !== false\" :unique-key=\"[...uniqueKey, item.name!]\" :menu=\"item\" :level=\"level + 1\" />\n </template>\n </OverlayScrollbarsComponent>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport SubMenu from './sub.vue'\nimport Item from './item.vue'\nimport type { MenuInjection } from './types.ts'\nimport { rootMenuInjectionKey } from './types.ts'\nimport type {Menu} from \"../../../typings/global\";\n\nexport interface MenuProps {\n menu: Menu.recordRaw[]\n value: string\n accordion?: boolean\n defaultOpeneds?: string[]\n mode?: 'horizontal' | 'vertical'\n collapse?: boolean\n showCollapseName?: boolean\n}\n\ndefineOptions({\n name: 'MainMenu',\n})\n\nconst props = withDefaults(\n defineProps<MenuProps>(),\n {\n accordion: true,\n defaultOpeneds: () => [],\n mode: 'vertical',\n collapse: false,\n showCollapseName: false,\n },\n)\n\nconst activeIndex = ref<MenuInjection['activeIndex']>(props.value)\nconst items = ref<MenuInjection['items']>({})\nconst subMenus = ref<MenuInjection['subMenus']>({})\nconst openedMenus = ref<MenuInjection['openedMenus']>(props.defaultOpeneds.slice(0))\nconst mouseInMenu = ref<MenuInjection['mouseInMenu']>([])\nconst isMenuPopup = computed<MenuInjection['isMenuPopup']>(() => {\n return props.mode === 'horizontal' || (props.mode === 'vertical' && props.collapse)\n})\n\n// 解析传入的 menu 数据,并保存到 items 和 subMenus 对象中\nfunction initItems(menu: MenuProps['menu'], parentPaths: string[] = []) {\n menu.forEach((item) => {\n const index = item.name as string// ?? JSON.stringify(item)\n if (item.children) {\n const indexPath = [...parentPaths, index]\n subMenus.value[index] = {\n index,\n indexPath,\n active: false,\n }\n initItems(item.children, indexPath)\n }\n else {\n items.value[index] = {\n index,\n indexPath: parentPaths,\n }\n }\n })\n}\n\nconst openMenu: MenuInjection['openMenu'] = (index, indexPath) => {\n if (openedMenus.value.includes(index)) {\n return\n }\n if (props.accordion) {\n openedMenus.value = openedMenus.value.filter(key => indexPath.includes(key))\n }\n openedMenus.value.push(index)\n}\nconst closeMenu: MenuInjection['closeMenu'] = (index) => {\n if (Array.isArray(index)) {\n nextTick(() => {\n closeMenu(index.at(-1)!)\n if (index.length > 1) {\n closeMenu(index.slice(0, -1))\n }\n })\n return\n }\n Object.keys(subMenus.value).forEach((item) => {\n if (subMenus.value[item].indexPath.includes(index)) {\n openedMenus.value = openedMenus.value.filter(item => item !== index)\n }\n })\n}\n\nfunction setSubMenusActive(index: string) {\n subMenus.value[index]?.indexPath.forEach((idx) => {\n subMenus.value[idx].active = true\n })\n items.value[index]?.indexPath.forEach((idx) => {\n subMenus.value[idx].active = true\n })\n}\n\nconst handleMenuItemClick: MenuInjection['handleMenuItemClick'] = (index) => {\n if (props.mode === 'horizontal' || props.collapse) {\n openedMenus.value = []\n }\n setSubMenusActive(index)\n}\nconst handleSubMenuClick: MenuInjection['handleSubMenuClick'] = (index, indexPath) => {\n if (openedMenus.value.includes(index)) {\n closeMenu(index)\n }\n else {\n openMenu(index, indexPath)\n }\n}\n\nfunction initMenu() {\n\n // 找到选中菜单\n const menuList = [...props.menu] as Menu.recordRaw[];\n\n for (const menuItem of menuList) {\n\n if(menuItem.routes.includes(activeIndex.value)){\n activeIndex.value = menuItem.name;\n }\n\n if(menuItem.children) {\n menuList.push(...menuItem.children)\n }\n }\n // 计算展开菜单\n openedMenus.value = [props.value]\n for(const menuItem of menuList){\n if(menuItem.children?.find((sub: Menu.recordRaw)=>openedMenus.value.includes(sub.name))){\n openedMenus.value.push(menuItem.name)\n }\n }\n\n\n const activeItem = activeIndex.value && items.value[activeIndex.value]\n\n if (!activeItem || props.collapse) {\n return\n }\n // 展开该菜单项的路径上所有子菜单\n activeItem.indexPath.forEach((index) => {\n const subMenu = subMenus.value[index]\n subMenu && openMenu(index, subMenu.indexPath)\n })\n}\n\nwatch(() => props.menu, (val) => {\n initItems(val)\n initMenu()\n}, {\n deep: true,\n immediate: true,\n})\n\nwatch(() => props.value, (currentValue) => {\n if (!items.value[currentValue]) {\n activeIndex.value = ''\n }\n const item = items.value[currentValue] || (activeIndex.value && items.value[activeIndex.value]) || items.value[props.value]\n if (item) {\n activeIndex.value = item.index\n }\n else {\n activeIndex.value = currentValue\n }\n initMenu()\n})\n\nwatch(() => props.collapse, (value) => {\n if (value) {\n openedMenus.value = []\n }\n initMenu()\n})\n\n;(window as any).rootMenu = reactive({\n props,\n items,\n subMenus,\n activeIndex,\n openedMenus,\n mouseInMenu,\n isMenuPopup,\n openMenu,\n closeMenu,\n handleMenuItemClick,\n handleSubMenuClick,\n});\n\nprovide(rootMenuInjectionKey, reactive({\n props,\n items,\n subMenus,\n activeIndex,\n openedMenus,\n mouseInMenu,\n isMenuPopup,\n openMenu,\n closeMenu,\n handleMenuItemClick,\n handleSubMenuClick,\n}))\n</script>\n\n<template>\n <div\n class=\"h-full w-full flex flex-col of-hidden transition-all\" :class=\"{\n 'flex-row! w-auto!': isMenuPopup && props.mode === 'horizontal',\n 'py-1': props.mode === 'vertical',\n }\"\n >\n <template v-for=\"item in menu\" :key=\"item.name!\">\n <template v-if=\"item.meta?.menu !== false\">\n <SubMenu v-if=\"item.children?.length\" :menu=\"item\" :unique-key=\"[item.name!]\" />\n <Item v-else :item=\"item\" :unique-key=\"[item.name!]\" @click=\"handleMenuItemClick(item.name!)\" />\n </template>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport {useElementSize} from '@vueuse/core'\nimport { MKSvgIcon } from \"../../../components\";\nimport Menu from '../Menu/index.vue'\nimport useSettingsStore from '../../store/modules/settings.ts'\nimport useMenuStore from '../../store/modules/menu.ts'\n\ndefineOptions({\n name: 'SubSidebar',\n})\n\nconst route = useRoute()\nconst settingsStore = useSettingsStore()\nconst menuStore = useMenuStore()\nconst routeName = computed(()=>(route.name ?? route.fullPath) as string)\n\nconst subSidebarRef = ref()\nconst showShadowTop = ref(false)\nconst showShadowBottom = ref(false)\n\nfunction onSidebarScroll() {\n const scrollTop = subSidebarRef.value.scrollTop\n showShadowTop.value = scrollTop > 0\n const clientHeight = subSidebarRef.value.clientHeight\n const scrollHeight = subSidebarRef.value.scrollHeight\n showShadowBottom.value = Math.ceil(scrollTop + clientHeight) < scrollHeight\n}\n\nconst enableSidebar = computed(() => {\n return settingsStore.mode === 'mobile' || (\n menuStore.sidebarMenus.length !== 0 && !menuStore.sidebarMenus.every(item => item.meta?.menu === false)\n )\n})\n\nwatch(enableSidebar, (val) => {\n if (val) {\n nextTick(() => {\n onSidebarScroll()\n })\n }\n}, {\n immediate: true,\n})\n\nconst menuRef = ref()\n\nonMounted(() => {\n\n if (enableSidebar.value) {\n\n const { height } = useElementSize(menuRef)\n\n watch(() => height.value, () => {\n if (height.value > 0) { onSidebarScroll() }\n }, { immediate: true, })\n\n }\n})\n</script>\n\n<template>\n <div v-if=\"enableSidebar\" class=\"sub-sidebar-container\" :class=\"{\n 'is-collapse': settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse,\n }\"\n >\n <div\n ref=\"subSidebarRef\" class=\"sub-sidebar flex-1 transition-shadow-300\" :class=\"{\n 'shadow-top': showShadowTop,\n 'shadow-bottom': showShadowBottom,\n }\" @scroll=\"onSidebarScroll\"\n >\n <div ref=\"menuRef\">\n <TransitionGroup name=\"sub-sidebar\">\n <template v-for=\"(mainItem, mainIndex) in menuStore.allMenus\" :key=\"mainIndex\">\n <div v-if=\"mainIndex === menuStore.actived\">\n <Menu\n :menu=\"mainItem.children\"\n :value=\"routeName\"\n :default-openeds=\"menuStore.defaultOpenedPaths\"\n :accordion=\"settingsStore.settings.menu.subMenuUniqueOpened\"\n :collapse=\"settingsStore.mode === 'pc' && settingsStore.settings.menu.subMenuCollapse\"\n class=\"menu\"\n :class=\"{\n '-mt-2': !['head', 'single'].includes(settingsStore.settings.menu.mode),\n }\"\n />\n </div>\n </template>\n </TransitionGroup>\n </div>\n </div>\n <div v-if=\"settingsStore.mode === 'pc'\" class=\"relative flex items-center px-4 py-3\"\n :class=\"[settingsStore.settings.menu.subMenuCollapse ? 'justify-center' : 'justify-end']\">\n <span v-show=\"settingsStore.settings.menu.enableSubMenuCollapseButton\"\n class=\"flex-center cursor-pointer rounded bg-stone-1 p-2 transition dark-bg-stone-9 hover-bg-stone-2 dark-hover-bg-stone-8\"\n :class=\"{ '-rotate-z-180': settingsStore.settings.menu.subMenuCollapse }\"\n @click=\"settingsStore.toggleSidebarCollapse()\">\n <MKSvgIcon name=\"toolbar-collapse\"/>\n </span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.sub-sidebar-container {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n width: var(--g-sub-sidebar-width);\n background-color: var(--g-sub-sidebar-bg);\n transition: background-color 0.3s, left 0.3s, width 0.3s;\n padding-top: 20px;\n\n &.is-collapse {\n width: var(--g-sub-sidebar-collapse-width);\n\n .sidebar-logo {\n &:not(.sidebar-logo-bg) {\n display: none;\n }\n\n :deep(span) {\n display: none;\n }\n }\n }\n\n .sidebar-logo {\n background-color: var(--g-sub-sidebar-bg);\n transition: background-color 0.3s;\n\n &.sidebar-logo-bg {\n background-color: var(--g-sub-sidebar-logo-bg);\n\n :deep(span) {\n color: var(--g-sub-sidebar-logo-color);\n }\n }\n }\n\n .sub-sidebar {\n overflow: hidden auto;\n overscroll-behavior: contain;\n\n // firefox隐藏滚动条\n scrollbar-width: none;\n\n // chrome隐藏滚动条\n &::-webkit-scrollbar {\n display: none;\n }\n\n &.shadow-top {\n box-shadow: inset 0 10px 10px -10px var(--g-box-shadow-color), inset 0 0 0 transparent;\n }\n\n &.shadow-bottom {\n box-shadow: inset 0 0 0 transparent, inset 0 -10px 10px -10px var(--g-box-shadow-color);\n }\n\n &.shadow-top.shadow-bottom {\n box-shadow: inset 0 10px 10px -10px var(--g-box-shadow-color), inset 0 -10px 10px -10px var(--g-box-shadow-color);\n }\n }\n\n .menu {\n width: 100%;\n }\n}\n\n// 次侧边栏动画\n.sub-sidebar-enter-active {\n transition: 0.2s;\n}\n\n.sub-sidebar-enter-from,\n.sub-sidebar-leave-active {\n opacity: 0;\n transform: translateY(30px) skewY(10deg);\n}\n\n.sub-sidebar-leave-active {\n position: absolute;\n}\n</style>\n","export default function useMainPage() {\n const router = useRouter()\n\n function reload() {\n router.push({ name: 'reload' })\n }\n\n return {\n reload,\n }\n}\n","import { defineStore } from \"pinia\";\nimport { ref } from \"vue\";\n\nconst useKeepAliveStore = defineStore(\n // 唯一ID\n \"keepAlive\",\n () => {\n const list = ref<string[]>([]);\n\n function add(name: string | string[]) {\n if (typeof name === \"string\") {\n !list.value.includes(name) && list.value.push(name);\n } else {\n name.forEach((v) => {\n v && !list.value.includes(v) && list.value.push(v);\n });\n }\n }\n function remove(name: string | string[]) {\n if (typeof name === \"string\") {\n list.value = list.value.filter((v) => {\n return v !== name;\n });\n } else {\n list.value = list.value.filter((v) => {\n return !name.includes(v);\n });\n }\n }\n function clean() {\n list.value = [];\n }\n\n return {\n list,\n add,\n remove,\n clean,\n };\n }\n);\n\nexport default useKeepAliveStore;\n","import type { RouteLocationNormalized } from \"vue-router\";\nimport useKeepAliveStore from \"./keepAlive.ts\";\nimport type { Tabbar } from \"../../../typings/global\";\nimport { defineStore } from \"pinia\";\nimport { ref } from \"vue\";\n\nconst useTabbarStore = defineStore(\n // 唯一ID\n \"tabbar\",\n () => {\n const keepAliveStore = useKeepAliveStore();\n\n const list = ref<Tabbar.recordRaw[]>([]);\n const leaveIndex = ref(-1);\n\n // 添加标签页\n async function add(route: RouteLocationNormalized) {\n const names: string[] = [];\n route.matched.forEach((v, i) => {\n if (i > 0) {\n v.components?.default.name && names.push(v.components.default.name);\n }\n });\n const meta = route.matched.at(-1)?.meta;\n const tabId = route.fullPath;\n\n if (route.name !== \"reload\") {\n // 记录查找到的标签页\n const findTab = list.value.find((item) => {\n if (item.routeName) {\n return item.routeName === route.name;\n } else {\n return item.tabId === tabId;\n }\n });\n // 新增标签页\n if (!findTab) {\n const listItem = {\n tabId,\n fullPath: route.fullPath,\n routeName: route.name,\n title:\n typeof meta?.title === \"function\" ? meta.title() : meta?.title,\n icon:\n meta?.icon ??\n meta?.breadcrumbNeste?.findLast((item) => item.icon)?.icon,\n name: names,\n };\n if (leaveIndex.value >= 0) {\n list.value.splice(leaveIndex.value + 1, 0, listItem);\n leaveIndex.value = -1;\n } else {\n list.value.push(listItem);\n }\n }\n }\n }\n // 删除指定标签页\n function remove(tabId: Tabbar.recordRaw[\"tabId\"]) {\n const keepName: string[] = [];\n const removeName: string[] = [];\n list.value.forEach((v) => {\n if (v.tabId === tabId) {\n removeName.push(...v.name);\n } else {\n keepName.push(...v.name);\n }\n });\n const name: string[] = [];\n removeName.forEach((v) => {\n if (!keepName.includes(v)) {\n name.push(v);\n }\n });\n // 如果是手动点击关闭 tab 标签页,则删除页面缓存\n keepAliveStore.remove(name);\n list.value = list.value.filter((item) => {\n return item.tabId !== tabId;\n });\n }\n // 删除两侧标签页\n function removeOtherSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\n const keepName: string[] = [];\n const removeName: string[] = [];\n list.value.forEach((v) => {\n if (v.tabId !== tabId) {\n removeName.push(...v.name);\n } else {\n keepName.push(...v.name);\n }\n });\n const name: string[] = [];\n removeName.forEach((v) => {\n if (!keepName.includes(v)) {\n name.push(v);\n }\n });\n keepAliveStore.remove(name);\n list.value = list.value.filter((item) => {\n return item.tabId === tabId;\n });\n }\n // 删除左侧标签页\n function removeLeftSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\n // 查找指定路由对应在标签页列表里的下标\n const index = list.value.findIndex((item) => item.tabId === tabId);\n const keepName: string[] = [];\n const removeName: string[] = [];\n list.value.forEach((v, i) => {\n if (i < index) {\n removeName.push(...v.name);\n } else {\n keepName.push(...v.name);\n }\n });\n const name: string[] = [];\n removeName.forEach((v) => {\n if (!keepName.includes(v)) {\n name.push(v);\n }\n });\n keepAliveStore.remove(name);\n list.value = list.value.filter((item, i) => {\n return i >= index;\n });\n }\n // 删除右侧标签页\n function removeRightSide(tabId: Tabbar.recordRaw[\"tabId\"]) {\n // 查找指定路由对应在标签页列表里的下标\n const index = list.value.findIndex((item) => item.tabId === tabId);\n const keepName: string[] = [];\n const removeName: string[] = [];\n list.value.forEach((v, i) => {\n if (i > index) {\n removeName.push(...v.name);\n } else {\n keepName.push(...v.name);\n }\n });\n const name: string[] = [];\n removeName.forEach((v) => {\n if (!keepName.includes(v)) {\n name.push(v);\n }\n });\n keepAliveStore.remove(name);\n list.value = list.value.filter((item, i) => {\n return i <= index;\n });\n }\n // 清空所有标签页,登出的时候需要清空\n function clean() {\n list.value = [];\n }\n\n return {\n list,\n leaveIndex,\n add,\n remove,\n removeOtherSide,\n removeLeftSide,\n removeRightSide,\n clean,\n };\n }\n);\n\nexport default useTabbarStore;\n","import type { RouteLocationRaw } from 'vue-router'\nimport { ElMessage } from 'element-plus'\nimport useTabbarStore from '../../store/modules/tabbar.ts'\n\nexport default function useTabbar() {\n const route = useRoute()\n const router = useRouter()\n\n const tabbarStore = useTabbarStore()\n\n function getId() {\n return route.fullPath\n }\n\n function open(to: RouteLocationRaw) {\n const index = tabbarStore.list.findIndex(item => item.tabId === getId())\n tabbarStore.$patch({\n leaveIndex: index,\n })\n router.push(to)\n }\n\n function go(delta: number) {\n const tabId = getId()\n router.go(delta)\n tabbarStore.remove(tabId)\n }\n\n function close(to: RouteLocationRaw) {\n const tabId = getId()\n router.push(to).then(() => {\n tabbarStore.remove(tabId)\n })\n }\n\n function closeById(tabId = getId()) {\n const activedTabId = getId()\n if (tabbarStore.list.some(item => item.tabId === tabId)) {\n if (tabbarStore.list.length > 1) {\n // 如果关闭的标签正好是当前路由\n if (tabId === activedTabId) {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n if (index < tabbarStore.list.length - 1) {\n close(tabbarStore.list[index + 1].fullPath)\n }\n else {\n close(tabbarStore.list[index - 1].fullPath)\n }\n }\n else {\n tabbarStore.remove(tabId)\n }\n }\n else {\n ElMessage.error({\n message:'当前只有一个标签页,已阻止关闭',\n })\n }\n }\n else {\n ElMessage.error({\n message:'关闭的页面不存在',\n })\n }\n }\n\n /**\n * 关闭两侧标签页\n */\n function closeOtherSide(tabId = getId()) {\n const activedTabId = getId()\n // 如果操作的是非当前路由标签页,则先跳转到指定路由标签页\n if (tabId !== activedTabId) {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n router.push(tabbarStore.list[index].fullPath)\n }\n tabbarStore.removeOtherSide(tabId)\n }\n\n /**\n * 关闭左侧标签页\n */\n function closeLeftSide(tabId = getId()) {\n const activedTabId = getId()\n // 如果操作的是非当前路由标签页,需要判断当前标签页是否在指定标签页左侧,如果是则先跳转到指定路由标签页\n if (tabId !== activedTabId) {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n const activedIndex = tabbarStore.list.findIndex(item => item.tabId === activedTabId)\n if (activedIndex < index) {\n router.push(tabbarStore.list[index].fullPath)\n }\n }\n tabbarStore.removeLeftSide(tabId)\n }\n\n /**\n * 关闭右侧标签页\n */\n function closeRightSide(tabId = getId()) {\n const activedTabId = getId()\n // 如果操作的是非当前路由标签页,需要判断当前标签页是否在指定标签页右侧,如果是则先跳转到指定路由标签页\n if (tabId !== activedTabId) {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n const activedIndex = tabbarStore.list.findIndex(item => item.tabId === activedTabId)\n if (activedIndex > index) {\n router.push(tabbarStore.list[index].fullPath)\n }\n }\n tabbarStore.removeRightSide(tabId)\n }\n\n /**\n * 校验指定标签两侧是否有可关闭的标签\n */\n function checkCloseOtherSide(tabId = getId()) {\n return tabbarStore.list.some((item) => {\n return item.tabId !== tabId\n })\n }\n\n /**\n * 校验指定标签左侧是否有可关闭的标签\n */\n function checkCloseLeftSide(tabId = getId()) {\n let flag = true\n if (tabId === tabbarStore.list[0]?.tabId) {\n flag = false\n }\n else {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n flag = tabbarStore.list.some((item, i) => {\n return i < index && item.tabId !== tabId\n })\n }\n return flag\n }\n\n /**\n * 校验指定标签右侧是否有可关闭的标签\n */\n function checkCloseRightSide(tabId = getId()) {\n let flag = true\n if (tabId === tabbarStore.list.at(-1)?.tabId) {\n flag = false\n }\n else {\n const index = tabbarStore.list.findIndex(item => item.tabId === tabId)\n flag = tabbarStore.list.some((item, i) => {\n return i >= index && item.tabId !== tabId\n })\n }\n return flag\n }\n\n return {\n getId,\n open,\n go,\n close,\n closeById,\n closeOtherSide,\n closeLeftSide,\n closeRightSide,\n checkCloseOtherSide,\n checkCloseLeftSide,\n checkCloseRightSide,\n }\n}\n","<script setup lang=\"ts\">\nimport ContextMenu from \"@imengyu/vue3-context-menu\";\nimport \"@imengyu/vue3-context-menu/lib/vue3-context-menu.css\";\nimport hotkeys from \"hotkeys-js\";\nimport { ElMessage } from 'element-plus'\nimport { useMagicKeys } from \"@vueuse/core\";\nimport useMainPage from \"../../../utils/composables/useMainPage.ts\"\nimport useSettingsStore from \"../../../store/modules/settings.ts\";\nimport useTabbarStore from \"../../../store/modules/tabbar.ts\";\nimport type { Tabbar } from \"../../../../typings/global\";\nimport useTabbar from \"../../../utils/composables/useTabbar.ts\"\n\ndefineOptions({\n name: \"Tabbar\",\n});\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst settingsStore = useSettingsStore();\nconst tabbarStore = useTabbarStore();\n\nconst tabbar = useTabbar();\nconst mainPage = useMainPage();\n\nconst keys = useMagicKeys({ reactive: true });\n\nconst activedTabId = computed(() => tabbar.getId());\n\nconst tabsRef = ref();\nconst tabContainerRef = ref();\nconst tabRef = shallowRef<HTMLElement[]>([]);\nonBeforeUpdate(() => {\n tabRef.value = [];\n});\n\nwatch(\n () => route,\n (val) => {\n if (settingsStore.settings.tabbar.enable) {\n tabbarStore.add(val).then(() => {\n const index = tabbarStore.list.findIndex(\n (item) => item.tabId === activedTabId.value\n );\n if (index !== -1) {\n scrollTo(tabRef.value[index].offsetLeft);\n tabbarScrollTip();\n }\n });\n }\n },\n {\n immediate: true,\n deep: true,\n }\n);\nfunction tabbarScrollTip() {\n if (\n tabContainerRef.value.$el.clientWidth > tabsRef.value.clientWidth &&\n localStorage.getItem(\"tabbarScrollTip\") === undefined\n ) {\n localStorage.setItem(\"tabbarScrollTip\", \"\");\n ElMessage.info(\n {\n message:\"标签栏数量超过展示区域范围,可以将鼠标移到标签栏上,通过鼠标滚轮滑动浏览\"\n }\n );\n }\n}\nfunction handlerMouserScroll(event: WheelEvent) {\n tabsRef.value.scrollBy({\n left: event.deltaY || event.detail,\n });\n}\nfunction scrollTo(offsetLeft: number) {\n tabsRef.value.scrollTo({\n left: offsetLeft - 50,\n behavior: \"smooth\",\n });\n}\nfunction onTabbarContextmenu(event: MouseEvent, routeItem: Tabbar.recordRaw) {\n event.preventDefault();\n ContextMenu.showContextMenu({\n x: event.x,\n y: event.y,\n zIndex: 1050,\n iconFontClass: \"\",\n customClass: \"tabbar-contextmenu\",\n items: [\n {\n label: \"重新加载\",\n icon: \"i-ri:refresh-line\",\n disabled: routeItem.tabId !== activedTabId.value,\n onClick: () => mainPage.reload(),\n },\n {\n label: \"关闭标签页\",\n icon: \"i-ri:close-line\",\n disabled: tabbarStore.list.length <= 1,\n divided: true,\n onClick: () => {\n tabbar.closeById(routeItem.tabId);\n },\n },\n {\n label: \"关闭其他标签页\",\n disabled: !tabbar.checkCloseOtherSide(routeItem.tabId),\n onClick: () => {\n tabbar.closeOtherSide(routeItem.tabId);\n },\n },\n {\n label: \"关闭左侧标签页\",\n disabled: !tabbar.checkCloseLeftSide(routeItem.tabId),\n onClick: () => {\n tabbar.closeLeftSide(routeItem.tabId);\n },\n },\n {\n label: \"关闭右侧标签页\",\n disabled: !tabbar.checkCloseRightSide(routeItem.tabId),\n onClick: () => {\n tabbar.closeRightSide(routeItem.tabId);\n },\n },\n ],\n });\n}\n\nonMounted(() => {\n hotkeys(\n \"alt+left,alt+right,alt+w,alt+1,alt+2,alt+3,alt+4,alt+5,alt+6,alt+7,alt+8,alt+9,alt+0\",\n (e, handle) => {\n if (\n settingsStore.settings.tabbar.enable &&\n settingsStore.settings.tabbar.enableHotkeys\n ) {\n e.preventDefault();\n switch (handle.key) {\n // 切换到当前标签页紧邻的上一个标签页\n case \"alt+left\":\n if (tabbarStore.list[0].tabId !== activedTabId.value) {\n const index = tabbarStore.list.findIndex(\n (item) => item.tabId === activedTabId.value\n );\n router.push(tabbarStore.list[index - 1].fullPath);\n }\n break;\n // 切换到当前标签页紧邻的下一个标签页\n case \"alt+right\":\n if (tabbarStore.list.at(-1)?.tabId !== activedTabId.value) {\n const index = tabbarStore.list.findIndex(\n (item) => item.tabId === activedTabId.value\n );\n router.push(tabbarStore.list[index + 1].fullPath);\n }\n break;\n // 关闭当前标签页\n case \"alt+w\":\n tabbar.closeById(activedTabId.value);\n break;\n // 切换到第 n 个标签页\n case \"alt+1\":\n case \"alt+2\":\n case \"alt+3\":\n case \"alt+4\":\n case \"alt+5\":\n case \"alt+6\":\n case \"alt+7\":\n case \"alt+8\":\n case \"alt+9\": {\n const number = Number(handle.key.split(\"+\")[1]);\n tabbarStore.list[number - 1]?.fullPath &&\n router.push(tabbarStore.list[number - 1].fullPath);\n break;\n }\n // 切换到最后一个标签页\n case \"alt+0\":\n router.push(tabbarStore.list[tabbarStore.list.length - 1].fullPath);\n break;\n }\n }\n }\n );\n});\nonUnmounted(() => {\n hotkeys.unbind(\n \"alt+left,alt+right,alt+w,alt+1,alt+2,alt+3,alt+4,alt+5,alt+6,alt+7,alt+8,alt+9,alt+0\"\n );\n});\n</script>\n\n<template>\n <div class=\"tabbar-container\">\n <div ref=\"tabsRef\" class=\"tabs\" @wheel.prevent=\"handlerMouserScroll\">\n <TransitionGroup ref=\"tabContainerRef\"\n name=\"tabbar\"\n tag=\"div\"\n class=\"tab-container\"\n >\n <div\n v-for=\"(element, index) in tabbarStore.list\"\n :key=\"element.tabId\"\n ref=\"tabRef\"\n :data-index=\"index\"\n class=\"tab\"\n :class=\"{\n actived: element.tabId === activedTabId,\n }\"\n :title=\"\n typeof element?.title === 'function'\n ? element.title()\n : element.title\n \"\n @click=\"router.push(element.fullPath)\"\n @contextmenu=\"onTabbarContextmenu($event, element)\"\n >\n <div class=\"tab-dividers\" />\n <div class=\"tab-background\" />\n <div class=\"tab-content\">\n <div :key=\"element.tabId\" class=\"title\">\n <MKSvgIcon\n v-if=\"settingsStore.settings.tabbar.enableIcon && element.icon\"\n :name=\"element.icon\"\n class=\"icon\"\n />\n {{\n typeof element?.title === \"function\"\n ? element.title()\n : element.title\n }}\n </div>\n <div\n v-if=\"tabbarStore.list.length > 1\"\n class=\"action-icon\"\n @click.stop=\"tabbar.closeById(element.tabId)\"\n >\n <MKSvgIcon name=\"i-ri:close-fill\" />\n </div>\n <div v-show=\"keys.alt && index < 9\" class=\"hotkey-number\">\n {{ index + 1 }}\n </div>\n </div>\n </div>\n </TransitionGroup>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" >\n\n.tabbar-contextmenu {\n z-index: 1000;\n\n .mx-context-menu {\n --at-apply: fixed ring-1 ring-stone-2 dark-ring-stone-7 shadow-2xl;\n\n background-color: var(--g-container-bg);\n\n .mx-context-menu-items .mx-context-menu-item {\n --at-apply: transition-background-color;\n cursor: pointer;\n &:not(.disabled):hover {\n --at-apply: cursor-pointer bg-stone-1 dark-bg-stone-9;\n }\n\n span {\n color: initial;\n }\n\n .icon {\n color: initial;\n }\n\n &.disabled span,\n &.disabled .icon {\n opacity: 0.25;\n }\n }\n\n .mx-context-menu-item-sperator {\n background-color: var(--g-container-bg);\n\n &::after {\n --at-apply: bg-stone-2 dark-bg-stone-7;\n }\n }\n }\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.tabbar-container {\n position: relative;\n height: var(--g-tabbar-height);\n background-color: var(--g-bg);\n transition: background-color 0.3s;\n\n .tabs {\n position: absolute;\n right: 0;\n left: 0;\n overflow-y: hidden;\n white-space: nowrap;\n background-color: var(--g-tabbar-tab-bg);\n\n // firefox隐藏滚动条\n scrollbar-width: none;\n\n // chrome隐藏滚动条\n &::-webkit-scrollbar {\n display: none;\n }\n\n .tab-container {\n display: inline-block;\n\n .tab {\n position: relative;\n display: inline-block;\n width: 150px;\n height: var(--g-tabbar-height);\n font-size: 14px;\n line-height: calc(var(--g-tabbar-height) - 2px);\n vertical-align: bottom;\n pointer-events: none;\n cursor: pointer;\n margin-left: 5px;\n\n //not(.actived)\n &:hover,&.actived {\n z-index: 3;\n\n &::before,\n &::after {\n content: none;\n }\n\n & + .tab .tab-dividers::before {\n opacity: 0;\n }\n\n .tab-content {\n .title,\n .action-icon {\n color: var(--g-tabbar-tab-hover-color);\n }\n }\n\n .tab-background {\n background-color: var(--g-tabbar-tab-hover-bg);\n }\n }\n\n * {\n user-select: none;\n }\n\n &.actived { z-index: 5; }\n\n .tab-dividers {\n position: absolute;\n top: 50%;\n right: -1px;\n left: -1px;\n z-index: 0;\n height: 14px;\n transform: translateY(-50%);\n\n &::before {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 1px;\n display: block;\n width: 1px;\n content: \"\";\n background-color: var(--g-tabbar-dividers-bg);\n opacity: 1;\n transition: opacity 0.2s ease, background-color 0.3s;\n }\n }\n\n &:first-child .tab-dividers::before {\n opacity: 0;\n }\n\n .tab-background {\n position: absolute;\n top: 5px;\n left: 0;\n z-index: 0;\n width: 100%;\n height: 80%;\n pointer-events: none;\n transition: opacity 0.3s, background-color 0.3s;\n border-radius: 0.2em;\n }\n\n .tab-content {\n display: flex;\n width: 100%;\n height: 100%;\n pointer-events: all;\n\n .title {\n display: flex;\n flex: 1;\n gap: 5px;\n align-items: center;\n height: 100%;\n padding: 0 10px;\n margin-right: 10px;\n overflow: hidden;\n color: var(--g-tabbar-tab-color);\n white-space: nowrap;\n mask-image: linear-gradient(\n to right,\n #000 calc(100% - 20px),\n transparent\n );\n transition: margin-right 0.3s;\n\n &:has(+ .action-icon) {\n margin-right: 28px;\n }\n\n .icon {\n flex-shrink: 0;\n }\n }\n\n .action-icon {\n position: absolute;\n top: 50%;\n right: 0.5em;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.5em;\n height: 1.5em;\n font-size: 12px;\n color: var(--g-tabbar-tab-color);\n border-radius: 50%;\n transform: translateY(-50%);\n\n &:hover {\n --at-apply: ring-1 ring-stone-3 dark-ring-stone-7;\n\n background-color: var(--g-bg);\n }\n }\n\n .hotkey-number {\n --at-apply: ring-1 ring-stone-3 dark-ring-stone-7;\n\n position: absolute;\n top: 50%;\n right: 0.5em;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.5em;\n height: 1.5em;\n font-size: 12px;\n color: var(--g-tabbar-tab-color);\n background-color: var(--g-bg);\n border-radius: 50%;\n transform: translateY(-50%);\n }\n }\n }\n }\n }\n}\n\n// 标签栏动画\n.tabs {\n .tabbar-move,\n .tabbar-enter-active,\n .tabbar-leave-active {\n transition: all 0.3s;\n }\n\n .tabbar-enter-from,\n .tabbar-leave-to {\n opacity: 0;\n transform: translateY(30px);\n }\n\n .tabbar-leave-active {\n position: absolute !important;\n }\n}\n</style>\n","<template>\n <div class=\"flex items-center text-sm\">\n <slot />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n:deep(.breadcrumb-item) {\n &:first-child {\n .separator {\n display: none;\n }\n }\n\n &:last-child {\n .text {\n opacity: 1;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { type RouteLocationRaw, useRouter } from \"vue-router\";\n\nconst props = withDefaults(\n defineProps<{\n to?: RouteLocationRaw;\n replace?: boolean;\n separator?: string;\n }>(),\n {\n separator: \"/\",\n }\n);\n\nconst router = useRouter();\n\nfunction onClick() {\n if (props.to) {\n props.replace ? router.replace(props.to) : router.push(props.to);\n }\n}\n</script>\n\n<template>\n <div class=\"breadcrumb-item flex items-center text-dark dark-text-white\">\n <span class=\"separator mx-2\">\n {{ separator }}\n </span>\n <span\n class=\"text flex items-center opacity-60\"\n :class=\"{\n 'is-link cursor-pointer transition-opacity hover-opacity-100':\n !!props.to,\n }\"\n @click=\"onClick\"\n >\n <slot />\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { compile } from 'path-to-regexp'\nimport Breadcrumb from '../../../Breadcrumb/index.vue'\nimport BreadcrumbItem from '../../../Breadcrumb/item.vue'\nimport useSettingsStore from '../../../../store/modules/settings.ts'\n\nconst route = useRoute()\n\nconst settingsStore = useSettingsStore()\n\nconst breadcrumbList = computed(() => {\n const breadcrumbList = []\n if (settingsStore.settings.home.enable) {\n breadcrumbList.push({\n path: settingsStore.settings.home.fullPath,\n title: settingsStore.settings.home.title,\n })\n }\n if (route.meta.breadcrumbNeste) {\n route.meta.breadcrumbNeste.forEach((item) => {\n if (item.hide === false) {\n breadcrumbList.push({\n path: item.path,\n title: item.title,\n })\n }\n })\n }\n return breadcrumbList\n})\n\nfunction pathCompile(path: string) {\n const toPath = compile(path)\n return toPath(route.params)\n}\n</script>\n\n<template>\n <Breadcrumb v-if=\"settingsStore.mode === 'pc' && settingsStore.settings.app.routeBaseOn !== 'filesystem'\" class=\"breadcrumb whitespace-nowrap px-2\">\n <TransitionGroup name=\"breadcrumb\">\n <BreadcrumbItem v-for=\"(item, index) in breadcrumbList\" :key=\"`${index}_${item.path}_${item.title}`\" :to=\"index < breadcrumbList.length - 1 && item.path !== '' ? pathCompile(item.path) : ''\">\n {{ item.title }}\n </BreadcrumbItem>\n </TransitionGroup>\n </Breadcrumb>\n</template>\n\n<style lang=\"scss\" scoped>\n// 面包屑动画\n.breadcrumb-enter-active {\n transition: transform 0.3s, opacity 0.3s;\n}\n\n.breadcrumb-enter-from {\n opacity: 0;\n transform: translateX(30px) skewX(-50deg);\n}\n</style>\n","<script setup lang=\"ts\">\nimport Breadcrumb from './Breadcrumb/index.vue'\nimport useSettingsStore from '../../../store/modules/settings.ts'\nimport Logo from \"../../../components/Logo/index.vue\";\n\ndefineOptions({\n name: 'ToolbarLeftSide',\n})\n\nconst settingsStore = useSettingsStore()\n</script>\n\n<template>\n <div class=\"flex items-center\">\n <Logo class=\"title\" :showLogo=\"false\" />\n <div v-if=\"settingsStore.mode === 'mobile'\" class=\"flex-center cursor-pointer px-2 py-1 -rotate-z-180\" @click=\"settingsStore.toggleSidebarCollapse()\">\n <MKSvgIcon name=\"toolbar-collapse\" />\n </div>\n <Breadcrumb v-if=\"settingsStore.settings.toolbar.breadcrumb\" />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport LeftSide from './leftSide.vue'\nimport RightSide from './rightSide.vue'\nimport useSettingsStore from '../../../store/modules/settings.ts'\n\ndefineOptions({\n name: 'Toolbar',\n})\n\nconst settingsStore = useSettingsStore()\n</script>\n\n<template>\n <div class=\"toolbar-container flex items-center justify-between\">\n <div class=\"h-full flex items-center of-hidden pr-16\" style=\"mask-image: linear-gradient(90deg, #000 0%, #000 calc(100% - 50px), transparent);\">\n <LeftSide />\n </div>\n <div v-show=\"['side', 'single'].includes(settingsStore.settings.menu.mode)\" class=\"h-full flex items-center px-2\">\n <RightSide />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.toolbar-container {\n height: var(--g-toolbar-height);\n background-color: var(--g-container-bg);\n color: var(--g-header-color);\n transition: background-color 0.3s;\n}\n</style>\n","<script setup lang=\"ts\">\nimport Tabbar from \"./Tabbar/index.vue\";\nimport Toolbar from \"./Toolbar/index.vue\";\nimport useSettingsStore from \"../../store/modules/settings.ts\";\n\ndefineOptions({\n name: \"Topbar\",\n});\n\nconst settingsStore = useSettingsStore();\n\nconst enableToolbar = computed(() => {\n return !(\n settingsStore.settings.menu.mode === \"head\" &&\n (!settingsStore.settings.toolbar.breadcrumb ||\n settingsStore.settings.app.routeBaseOn === \"filesystem\")\n );\n});\n\nconst scrollTop = ref(0);\nconst scrollOnHide = ref(false);\nconst topbarHeight = computed(() => {\n const tabbarHeight = settingsStore.settings.tabbar.enable\n ? Number.parseInt(\n getComputedStyle(\n document.documentElement || document.body\n ).getPropertyValue(\"--g-tabbar-height\")\n )\n : 0;\n const toolbarHeight = enableToolbar.value\n ? Number.parseInt(\n getComputedStyle(\n document.documentElement || document.body\n ).getPropertyValue(\"--g-toolbar-height\")\n )\n : 0;\n return tabbarHeight + toolbarHeight;\n});\nonMounted(() => {\n window.addEventListener(\"scroll\", onScroll);\n});\nonUnmounted(() => {\n window.removeEventListener(\"scroll\", onScroll);\n});\nfunction onScroll() {\n scrollTop.value = (document.documentElement || document.body).scrollTop;\n}\nwatch(scrollTop, (val, oldVal) => {\n scrollOnHide.value =\n settingsStore.settings.topbar.mode === \"sticky\" &&\n val > oldVal &&\n val > topbarHeight.value;\n});\n</script>\n\n<template>\n <div\n class=\"topbar-container\"\n :class=\"{\n 'has-tabbar': settingsStore.settings.tabbar.enable,\n 'has-toolbar': enableToolbar,\n [`topbar-${settingsStore.settings.topbar.mode}`]: true,\n shadow: scrollTop,\n hide: scrollOnHide,\n }\"\n data-fixed-calc-width\n >\n <Toolbar v-if=\"enableToolbar\" />\n <Tabbar v-if=\"settingsStore.settings.tabbar.enable\" />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.topbar-container {\n position: absolute;\n top: 0;\n z-index: 999;\n display: flex;\n flex-direction: column;\n box-shadow: 0 1px 0 0 var(--g-border-color);\n transition: width 0.3s, top 0.3s, transform 0.3s, box-shadow 0.3s;\n\n &.topbar-fixed,\n &.topbar-sticky {\n position: fixed;\n\n &.shadow {\n box-shadow: 0 10px 10px -10px var(--g-box-shadow-color);\n }\n }\n\n &.topbar-sticky.hide {\n top: calc(\n (var(--g-tabbar-height) + var(--g-toolbar-height)) * -1\n ) !important;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useRouter } from \"vue-router\";\nimport {\n Dialog,\n DialogDescription,\n DialogPanel,\n TransitionChild,\n TransitionRoot,\n} from \"@headlessui/vue\";\nimport type { OverlayScrollbarsComponentRef } from \"overlayscrollbars-vue\";\nimport { OverlayScrollbarsComponent } from \"overlayscrollbars-vue\";\nimport { cloneDeep } from \"lodash-es\";\nimport hotkeys from \"hotkeys-js\";\nimport Breadcrumb from \"../Breadcrumb/index.vue\";\nimport BreadcrumbItem from \"../Breadcrumb/item.vue\";\nimport { resolveRoutePath } from \"../../utils/index.ts\";\nimport eventBus from \"../../utils/eventBus.ts\";\nimport useSettingsStore from \"../../store/modules/settings.ts\";\nimport useMenuStore from \"../../store/modules/menu.ts\";\nimport type { Menu } from \"../../../typings/global\";\nimport HKbd from \"../Kbd/index.vue\";\n\ndefineOptions({\n name: \"Search\",\n});\n\nconst overlayTransitionClass = ref({\n enter: \"ease-in-out duration-500\",\n enterFrom: \"opacity-0\",\n enterTo: \"opacity-100\",\n leave: \"ease-in-out duration-500\",\n leaveFrom: \"opacity-100\",\n leaveTo: \"opacity-0\",\n});\n\nconst transitionClass = computed(() => {\n return {\n enter: \"ease-out duration-300\",\n enterFrom: \"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95\",\n enterTo: \"opacity-100 translate-y-0 lg-scale-100\",\n leave: \"ease-in duration-200\",\n leaveFrom: \"opacity-100 translate-y-0 lg-scale-100\",\n leaveTo: \"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95\",\n };\n});\n\nconst router = useRouter();\nconst settingsStore = useSettingsStore();\nconst menuStore = useMenuStore();\n\ninterface listTypes {\n path: string;\n icon?: string;\n title?: string | (() => string);\n link?: string;\n breadcrumb: {\n title?: string | (() => string);\n }[];\n}\n\nconst isShow = ref(false);\nconst searchInput = ref(\"\");\nconst sourceList = ref<listTypes[]>([]);\nconst actived = ref(-1);\n\nconst searchInputRef = ref();\nconst searchResultRef = ref<OverlayScrollbarsComponentRef>();\nconst searchResultItemRef = ref<HTMLElement[]>([]);\nonBeforeUpdate(() => {\n searchResultItemRef.value = [];\n});\n\nconst resultList = computed(() => {\n let result = [];\n result = sourceList.value.filter((item) => {\n let flag = false;\n if (item.title) {\n if (typeof item.title === \"function\") {\n if (item.title().includes(searchInput.value)) {\n flag = true;\n }\n } else {\n if (item.title.includes(searchInput.value)) {\n flag = true;\n }\n }\n }\n if (item.path.includes(searchInput.value)) {\n flag = true;\n }\n if (\n item.breadcrumb.some((b) => {\n if (typeof b.title === \"function\") {\n if (b.title().includes(searchInput.value)) {\n return true;\n }\n } else {\n if (b.title?.includes(searchInput.value)) {\n return true;\n }\n }\n return false;\n })\n ) {\n flag = true;\n }\n return flag;\n });\n return result;\n});\n\nwatch(\n () => isShow.value,\n (val) => {\n if (val) {\n searchInput.value = \"\";\n actived.value = -1;\n // 当搜索显示的时候绑定上、下、回车快捷键,隐藏的时候再解绑。另外当 input 处于 focus 状态时,采用 vue 来绑定键盘事件\n hotkeys(\"up\", keyUp);\n hotkeys(\"down\", keyDown);\n hotkeys(\"enter\", keyEnter);\n } else {\n hotkeys.unbind(\"up\", keyUp);\n hotkeys.unbind(\"down\", keyDown);\n hotkeys.unbind(\"enter\", keyEnter);\n }\n }\n);\nwatch(\n () => resultList.value,\n () => {\n actived.value = -1;\n handleScroll();\n }\n);\n\nonMounted(() => {\n eventBus.on(\"global-search-toggle\", () => {\n if (!isShow.value) {\n initSourceList();\n }\n isShow.value = !isShow.value;\n });\n hotkeys(\"alt+s\", (e) => {\n if (\n settingsStore.settings.toolbar.navSearch &&\n settingsStore.settings.navSearch.enableHotkeys\n ) {\n e.preventDefault();\n initSourceList();\n isShow.value = true;\n }\n });\n hotkeys(\"esc\", (e) => {\n if (\n settingsStore.settings.toolbar.navSearch &&\n settingsStore.settings.navSearch.enableHotkeys\n ) {\n e.preventDefault();\n isShow.value = false;\n }\n });\n initSourceList();\n});\n\nfunction initSourceList() {\n sourceList.value = [];\n menuStore.allMenus.forEach((item) => {\n getSourceListByMenus(item.children);\n });\n}\n\nfunction hasChildren(item: Menu.recordRaw) {\n let flag = true;\n if (item.children?.every((i) => i.meta?.menu === false)) {\n flag = false;\n }\n return flag;\n}\nfunction getSourceListByMenus(\n arr: Menu.recordRaw[],\n basePath?: string,\n icon?: string,\n breadcrumb?: { title?: string | (() => string) }[]\n) {\n arr.forEach((item) => {\n if (item.meta?.menu !== false) {\n const breadcrumbTemp = cloneDeep(breadcrumb) || [];\n if (item.children && hasChildren(item)) {\n breadcrumbTemp.push({\n title: item.meta?.title,\n });\n getSourceListByMenus(\n item.children,\n resolveRoutePath(basePath, item.path),\n item.meta?.icon ?? icon,\n breadcrumbTemp\n );\n } else {\n breadcrumbTemp.push({\n title: item.meta?.title,\n });\n sourceList.value.push({\n path: resolveRoutePath(basePath, item.path),\n icon: item.meta?.icon ?? icon,\n title: item.meta?.title,\n link: item.meta?.link,\n breadcrumb: breadcrumbTemp,\n });\n }\n }\n });\n}\n\nfunction keyUp() {\n if (resultList.value.length) {\n actived.value -= 1;\n if (actived.value < 0) {\n actived.value = resultList.value.length - 1;\n }\n handleScroll();\n }\n}\nfunction keyDown() {\n if (resultList.value.length) {\n actived.value += 1;\n if (actived.value > resultList.value.length - 1) {\n actived.value = 0;\n }\n handleScroll();\n }\n}\nfunction keyEnter() {\n if (actived.value !== -1) {\n searchResultItemRef.value\n .find((item) => Number.parseInt(item.dataset.index!) === actived.value)\n ?.click();\n }\n}\nfunction handleScroll() {\n if (searchResultRef.value) {\n const contentDom = searchResultRef.value.osInstance()!.elements().content;\n let scrollTo = 0;\n if (actived.value !== -1) {\n scrollTo = contentDom.scrollTop;\n const activedOffsetTop =\n searchResultItemRef.value.find(\n (item) => Number.parseInt(item.dataset.index!) === actived.value\n )?.offsetTop ?? 0;\n const activedClientHeight =\n searchResultItemRef.value.find(\n (item) => Number.parseInt(item.dataset.index!) === actived.value\n )?.clientHeight ?? 0;\n const searchScrollTop = contentDom.scrollTop;\n const searchClientHeight = contentDom.clientHeight;\n if (\n activedOffsetTop + activedClientHeight >\n searchScrollTop + searchClientHeight\n ) {\n scrollTo = activedOffsetTop + activedClientHeight - searchClientHeight;\n } else if (activedOffsetTop <= searchScrollTop) {\n scrollTo = activedOffsetTop;\n }\n }\n contentDom.scrollTo({\n top: scrollTo,\n });\n }\n}\n\nfunction pageJump(path: listTypes[\"path\"], link: listTypes[\"link\"]) {\n if (link) {\n window.open(link, \"_blank\");\n } else {\n router.push(path);\n }\n isShow.value = false;\n}\n</script>\n\n<template>\n <TransitionRoot as=\"template\" :show=\"isShow\">\n <Dialog\n :initial-focus=\"searchInputRef\"\n class=\"fixed inset-0 z-2000 flex\"\n @close=\"isShow && eventBus.emit('global-search-toggle')\"\n >\n <TransitionChild as=\"template\" v-bind=\"overlayTransitionClass\">\n <div\n class=\"fixed inset-0 bg-stone-200/75 backdrop-blur-sm transition-opacity dark-bg-stone-8/75\"\n />\n </TransitionChild>\n <div class=\"fixed inset-0\">\n <div\n class=\"h-full flex items-end justify-center p-4 text-center lg-items-center\"\n >\n <TransitionChild as=\"template\" v-bind=\"transitionClass\">\n <DialogPanel\n class=\"relative h-full max-h-4/5 w-full flex flex-col text-left lg-max-w-2xl\"\n >\n <div\n class=\"flex flex-col overflow-y-auto rounded-xl bg-white shadow-xl dark-bg-stone-8\"\n >\n <div\n class=\"flex items-center px-4 py-3\"\n border-b=\"~ solid stone-2 dark-stone-7\"\n >\n <MKSvgIcon name=\"i-ep:search\" :size=\"18\" class=\"text-stone-5\" />\n <input\n ref=\"searchInputRef\"\n v-model=\"searchInput\"\n placeholder=\"搜索页面,支持标题、URL模糊查询\"\n class=\"w-full border-0 rounded-md bg-transparent px-3 text-base text-dark dark-text-white focus-outline-none placeholder-stone-4 dark-placeholder-stone-5\"\n @keydown.esc=\"eventBus.emit('global-search-toggle')\"\n @keydown.up.prevent=\"keyUp\"\n @keydown.down.prevent=\"keyDown\"\n @keydown.enter.prevent=\"keyEnter\"\n />\n </div>\n <DialogDescription class=\"relative m-0 of-y-hidden\">\n <OverlayScrollbarsComponent\n ref=\"searchResultRef\"\n :options=\"{\n scrollbars: { autoHide: 'leave', autoHideDelay: 300 },\n }\"\n defer\n class=\"h-full\"\n >\n <template v-if=\"resultList.length > 0\">\n <a\n v-for=\"(item, index) in resultList\"\n ref=\"searchResultItemRef\"\n :key=\"item.path\"\n class=\"flex cursor-pointer items-center\"\n :class=\"{\n 'bg-stone-2/40 dark-bg-stone-7/40': index === actived,\n }\"\n :data-index=\"index\"\n @click=\"pageJump(item.path, item.link)\"\n @mouseover=\"actived = index\"\n >\n <MKSvgIcon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n :size=\"20\"\n class=\"basis-16 transition\"\n :class=\"{\n 'scale-120 text-ui-primary': index === actived,\n }\"\n />\n <div\n class=\"flex flex-1 flex-col gap-1 truncate px-4 py-3\"\n border-l=\"~ solid stone-2 dark-stone-7\"\n >\n <div class=\"truncate text-base font-bold\">\n {{\n (typeof item.title === \"function\"\n ? item.title()\n : item.title) ?? \"[ 无标题 ]\"\n }}\n </div>\n <Breadcrumb\n v-if=\"item.breadcrumb.length\"\n class=\"truncate\"\n >\n <BreadcrumbItem\n v-for=\"(bc, bcIndex) in item.breadcrumb\"\n :key=\"bcIndex\"\n class=\"text-xs\"\n >\n {{\n (typeof bc.title === \"function\"\n ? bc.title()\n : bc.title) ?? \"[ 无标题 ]\"\n }}\n </BreadcrumbItem>\n </Breadcrumb>\n </div>\n </a>\n </template>\n <template v-else>\n <div flex=\"center col\" py-6 text-stone-5>\n <MKSvgIcon name=\"i-tabler:mood-empty\" :size=\"40\" />\n <p m-2 text-base>没有找到你想要的</p>\n </div>\n </template>\n </OverlayScrollbarsComponent>\n </DialogDescription>\n <div\n v-if=\"settingsStore.mode === 'pc'\"\n class=\"flex justify-between px-4 py-3\"\n border-t=\"~ solid stone-2 dark-stone-7\"\n >\n <div class=\"flex gap-8\">\n <div class=\"inline-flex items-center gap-1 text-xs\">\n <HKbd>\n <MKSvgIcon name=\"i-ion:md-return-left\" :size=\"14\" />\n </HKbd>\n <span>访问</span>\n </div>\n <div class=\"inline-flex items-center gap-1 text-xs\">\n <HKbd>\n <MKSvgIcon\n name=\"i-ant-design:caret-up-filled\"\n :size=\"14\"\n />\n </HKbd>\n <HKbd>\n <MKSvgIcon\n name=\"i-ant-design:caret-down-filled\"\n :size=\"14\"\n />\n </HKbd>\n <span>切换</span>\n </div>\n </div>\n <div\n v-if=\"settingsStore.settings.navSearch.enableHotkeys\"\n class=\"inline-flex items-center gap-1 text-xs\"\n >\n <HKbd> ESC </HKbd>\n <span>退出</span>\n </div>\n </div>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n","<script setup lang=\"ts\">\nimport eventBus from \"../../utils/eventBus.ts\";\nimport useSettingsStore from \"../../store/modules/settings.ts\";\nimport HKbd from \"../Kbd/index.vue\";\n\ndefineOptions({\n name: \"HotkeysIntro\",\n});\n\nconst isShow = ref(false);\n\nconst settingsStore = useSettingsStore();\n\nonMounted(() => {\n eventBus.on(\"global-hotkeys-intro-toggle\", () => {\n isShow.value = !isShow.value;\n });\n});\n</script>\n\n<template>\n <el-dialog v-model=\"isShow\" title=\"快捷键介绍\">\n <div class=\"px-4\">\n <div class=\"grid gap-2 sm-grid-cols-2\">\n <div>\n <h2 class=\"m-0 text-lg font-bold\">全局</h2>\n <ul class=\"list-none pl-4 text-sm\">\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>I</HKbd>\n 查看系统信息\n </li>\n <li\n v-if=\"\n settingsStore.settings.toolbar.navSearch &&\n settingsStore.settings.navSearch.enableHotkeys\n \"\n class=\"py-1\"\n >\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>S</HKbd>\n 唤起导航搜索\n </li>\n </ul>\n </div>\n <div\n v-if=\"\n settingsStore.settings.menu.enableHotkeys &&\n ['side', 'head'].includes(settingsStore.settings.menu.mode)\n \"\n >\n <h2 class=\"m-0 text-lg font-bold\">主导航</h2>\n <ul class=\"list-none pl-4 text-sm\">\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>`</HKbd>\n 激活下一个主导航\n </li>\n </ul>\n </div>\n <div\n v-if=\"\n settingsStore.settings.tabbar.enable &&\n settingsStore.settings.tabbar.enableHotkeys\n \"\n >\n <h2 class=\"m-0 text-lg font-bold\">标签栏</h2>\n <ul class=\"list-none pl-4 text-sm\">\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>←</HKbd>\n 切换到上一个标签页\n </li>\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>→</HKbd>\n 切换到下一个标签页\n </li>\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>W</HKbd>\n 关闭当前标签页\n </li>\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>1~9</HKbd>\n 切换到第 n 个标签页\n </li>\n <li class=\"py-1\">\n <HKbd>{{ settingsStore.os === \"mac\" ? \"⌥\" : \"Alt\" }}</HKbd>\n <HKbd>0</HKbd>\n 切换到最后一个标签页\n </li>\n </ul>\n </div>\n </div>\n </div>\n </el-dialog>\n</template>\n","<script setup lang=\"ts\">\nimport { useClipboard } from '@vueuse/core'\n\nimport { ElMessage } from 'element-plus'\n\ndefineOptions({\n name: 'LinkView',\n})\n\nconst route = useRoute()\n\nconst { copy, copied } = useClipboard()\nwatch(copied, (val) => {\n val && ElMessage.success({ message:\"'复制成功'\"})\n})\n\nfunction open() {\n window.open(route.meta.link, '_blank')\n}\n</script>\n\n<template>\n <div class=\"absolute h-full w-full flex flex-col\">\n <Transition name=\"slide-right\" mode=\"out-in\" appear>\n<!-- PageMain-->\n <div :key=\"route.meta.link\" class=\"flex flex-1 flex-col justify-center\">\n <div class=\"flex flex-col items-center\">\n <MKSvgIcon name=\"i-icon-park-twotone:planet\" :size=\"120\" class=\"text-ui-primary/80\" />\n <div class=\"my-2 text-xl text-dark dark-text-white\">\n 是否访问此链接\n </div>\n <div class=\"my-2 max-w-[300px] cursor-pointer text-center text-[14px] text-stone-5\" @click=\"route.meta.link && copy(route.meta.link)\">\n <el-tooltip content=\"复制链接\">\n <div class=\"line-clamp-3\">\n {{ route.meta.link }}\n </div>\n </el-tooltip>\n </div>\n <el-button class=\"my-4\" @click=\"open\">\n <MKSvgIcon name=\"i-ri:external-link-fill\" />\n 立即访问\n </el-button>\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.slide-right-enter-active {\n transition: 0.2s;\n}\n\n.slide-right-leave-active {\n transition: 0.15s;\n}\n\n.slide-right-enter-from {\n margin-left: -20px;\n opacity: 0;\n}\n\n.slide-right-leave-to {\n margin-left: 20px;\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport useSettingsStore from '../../store/modules/settings.ts'\n\ndefineOptions({\n name: 'Copyright',\n})\n\nconst settingsStore = useSettingsStore()\n</script>\n\n<template>\n <footer v-if=\"settingsStore.settings.copyright.enable\" class=\"copyright\">\n <span>Copyright</span>\n <MKSvgIcon name=\"i-ri:copyright-line\" :size=\"18\" />\n <span v-if=\"settingsStore.settings.copyright.dates\">{{ settingsStore.settings.copyright.dates }}</span>\n <template v-if=\"settingsStore.settings.copyright.company\">\n <a v-if=\"settingsStore.settings.copyright.website\" :href=\"settingsStore.settings.copyright.website\" target=\"_blank\" rel=\"noopener\">{{ settingsStore.settings.copyright.company }}</a>\n <span v-else>{{ settingsStore.settings.copyright.company }}</span>\n </template>\n <a v-if=\"settingsStore.settings.copyright.beian\" href=\"https://beian.miit.gov.cn/\" target=\"_blank\" rel=\"noopener\">{{ settingsStore.settings.copyright.beian }}</a>\n </footer>\n</template>\n\n<style lang=\"scss\" scoped>\n.copyright {\n --at-apply: flex items-center justify-center flex-wrap my-4 px-4 text-sm text-stone-5;\n\n span,\n a {\n --at-apply: px-1;\n }\n\n a {\n --at-apply: text-center no-underline text-stone-5 hover-text-dark dark-hover-text-light transition;\n }\n}\n</style>\n","<script setup lang=\"ts\">\n\ndefineOptions({\n name: 'BackTop',\n})\n\nconst transitionClass = {\n enterActiveClass: 'ease-out duration-300',\n enterFromClass: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\n enterToClass: 'opacity-100 translate-y-0 lg-scale-100',\n leaveActiveClass: 'ease-in duration-200',\n leaveFromClass: 'opacity-100 translate-y-0 lg-scale-100',\n leaveToClass: 'opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95',\n}\n\nonMounted(() => {\n window.addEventListener('scroll', handleScroll)\n handleScroll()\n})\n\nonBeforeUnmount(() => {\n window.removeEventListener('scroll', handleScroll)\n})\n\nconst scrollTop = ref<number | null>(null)\nfunction handleScroll() {\n scrollTop.value = document.documentElement.scrollTop\n}\n\nfunction handleClick() {\n document.documentElement.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n}\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition v-bind=\"transitionClass\">\n <div v-if=\"scrollTop && scrollTop >= 200\" class=\"fixed bottom-4 right-4 z-1000 h-12 w-12 flex cursor-pointer items-center justify-center rounded-full bg-white shadow-lg ring-1 ring-stone-3 ring-inset dark-bg-dark hover-bg-stone-1 dark-ring-stone-7 dark-hover-bg-dark/50\" @click=\"handleClick\">\n <MKSvgIcon name=\"i-icon-park-outline:to-top-one\" :size=\"24\" />\n </div>\n </Transition>\n </Teleport>\n</template>\n","import {\n computed,\n defineComponent,\n renderSlot,\n unref,\n useSlots,\n watch,\n} from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { Components } from \"@maketribe/dm\";\nimport { useMSAppClient } from \"../../../composables\";\nimport { MKConfigProvider } from \"../../../components\";\n\n/**\n * 路由变动的几种情况,\n * 1.点击菜单跳转陆游\n * 2.特定业务逻辑需要跳转路由\n * 3.返回上一页\n * 4.刷新页面\n */\n\nexport default defineComponent({\n name: \"SystemProvider\",\n setup() {\n const vueRouter = useRouter();\n\n const msAppClient = useMSAppClient();\n\n const ready = computed(() => msAppClient.ready);\n\n const slots = useSlots();\n\n watch(\n computed(() => unref(vueRouter.currentRoute)),\n (route) => {\n const userSession = msAppClient.userSession;\n\n if (!userSession) {\n return;\n }\n\n const router = userSession.router;\n const menu = userSession.menu;\n const tabs = userSession.tabs;\n\n const routeInfo = router.getRouteByName(route.name as string);\n\n if (!routeInfo) {\n menu.setCurrentMenuNode(null);\n tabs.setCurrentTab(null);\n return;\n }\n\n const menuNode = menu.findMenuNodeByID(routeInfo.menuId);\n\n if (!menuNode) {\n menu.setCurrentMenuNode(null);\n tabs.setCurrentTab(null);\n return;\n }\n\n menu.setCurrentMenuNode(menuNode);\n\n const tab =\n tabs.findTabByID(route.fullPath) ??\n tabs.createTab({\n id: route.fullPath,\n title: routeInfo.title,\n affix: !!route.matched?.[route.matched?.length - 1]?.meta?.affix,\n realRoute: route,\n route: routeInfo,\n });\n\n tabs.switchTab(tab);\n },\n { immediate: true }\n );\n\n return () => {\n return (\n <MKConfigProvider\n dataTableComponents={msAppClient.dataTableComponents as Components}\n dataFormComponents={msAppClient.dataFormComponents as Components}\n dataFilterComponents={msAppClient.dataFilterComponents as Components}\n whereFilterComponents={\n msAppClient.whereFilterComponents as Components\n }\n dataTableHeaderComponents={msAppClient.dataTableHeaderComponents as Components}\n i18n={msAppClient.i18n}\n >\n {renderSlot(slots, \"default\")}\n </MKConfigProvider>\n );\n };\n },\n});\n","<script setup lang=\"ts\">\nimport hotkeys from \"hotkeys-js\";\nimport Header from \"./components/Header/index.vue\";\nimport MainSidebar from \"./components/MainSidebar/index.vue\";\nimport SubSidebar from \"./components/SubSidebar/index.vue\";\nimport Topbar from \"./components/Topbar/index.vue\";\nimport Search from \"./components/Search/index.vue\";\nimport HotkeysIntro from \"./components/HotkeysIntro/index.vue\";\nimport AppSetting from \"./components/AppSetting/index.vue\";\nimport LinkView from \"./components/Views/link.vue\";\nimport Copyright from \"./components/Copyright/index.vue\";\nimport BackTop from \"./components/BackTop/index.vue\";\nimport useSettingsStore from \"./store/modules/settings.ts\";\nimport useKeepAliveStore from \"./store/modules/keepAlive.ts\";\nimport useMenuStore from \"./store/modules/menu.ts\";\nimport useMainPage from \"./utils/composables/useMainPage.ts\"\nimport eventBus from \"./utils/eventBus.ts\";\nimport useMenu from \"./utils/composables/useMenu.ts\"\nimport \"../assets/styles/resources/utils.scss\";\nimport \"../assets/styles/resources/variables.scss\";\nimport \"../assets/styles/globals.scss\";\nimport {MKAsyncComponentView,MKSvgIcon} from \"../components\";\nimport SystemProvider from \"./components/SystemProvider\"\nimport { onErrorCaptured } from \"vue\";\n\ndefineOptions({ name: \"Layout\"});\n\nconst pageErrorInfo = ref(\"\");\n\nonErrorCaptured((err,instance,info)=>{\n pageErrorInfo.value = info == \"setup function\" ? err.message : \"\";\n})\n\nconst routeInfo = useRoute();\n\nconst settingsStore = useSettingsStore();\nconst keepAliveStore = useKeepAliveStore();\nconst menuStore = useMenuStore();\n\nconst mainPage = useMainPage();\nconst menu = useMenu();\n\nconst isLink = computed(() => !!routeInfo.meta.link);\n\nwatch(\n () => settingsStore.settings.menu.subMenuCollapse,\n (val) => {\n if (settingsStore.mode === \"mobile\") {\n if (!val) {\n document.body.classList.add(\"overflow-hidden\");\n } else {\n document.body.classList.remove(\"overflow-hidden\");\n }\n }\n }\n);\n\nwatch(\n () => routeInfo.path,\n () => {\n pageErrorInfo.value = \"\";\n if (settingsStore.mode === \"mobile\") {\n settingsStore.$patch((state) => {\n state.settings.menu.subMenuCollapse = true;\n });\n }\n }\n);\n\nonMounted(() => {\n hotkeys(\"f5\", (e) => {\n if (settingsStore.settings.toolbar.pageReload) {\n e.preventDefault();\n mainPage.reload();\n }\n });\n hotkeys(\"alt+`\", (e) => {\n if (settingsStore.settings.menu.enableHotkeys) {\n e.preventDefault();\n menu.switchTo(\n menuStore.actived + 1 < menuStore.allMenus.length\n ? menuStore.actived + 1\n : 0\n );\n }\n });\n});\nonUnmounted(() => {\n hotkeys.unbind(\"f5\");\n hotkeys.unbind(\"alt+`\");\n});\n\nconst enableAppSetting = import.meta.env.MODE === \"development\";\n\n// 侧边栏主导航当前实际宽度\nconst mainSidebarActualWidth = computed(() => {\n let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-main-sidebar-width'))\n if (settingsStore.settings.menu.mode === 'single' || (settingsStore.settings.menu.mode === 'head' && settingsStore.mode !== 'mobile')) {\n actualWidth = 0\n }\n return `${actualWidth}px`\n})\n\n// 侧边栏次导航当前实际宽度\nconst subSidebarActualWidth = computed(() => {\n let actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-width'))\n if (settingsStore.settings.menu.subMenuCollapse && settingsStore.mode !== 'mobile') {\n actualWidth = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--g-sub-sidebar-collapse-width'))\n }\n if (menuStore.sidebarMenus.every(item => item.meta?.menu === false)) {\n actualWidth = 0\n }\n return `${actualWidth}px`\n})\n</script>\n\n<template>\n <SystemProvider>\n <div class=\"layout\"\n :style=\"{\n '--g-main-sidebar-actual-width': mainSidebarActualWidth,\n '--g-sub-sidebar-actual-width': subSidebarActualWidth,\n }\">\n <div id=\"app-main\">\n <Header/>\n <div class=\"wrapper\">\n <div class=\"sidebar-container\" :class=\"{ show: settingsStore.mode === 'mobile' && !settingsStore.settings.menu.subMenuCollapse }\">\n <MainSidebar/>\n </div>\n <div class=\"sidebar-mask\"\n :class=\"{ show: settingsStore.mode === 'mobile' && !settingsStore.settings.menu.subMenuCollapse, }\"\n @click=\"settingsStore.toggleSidebarCollapse()\"\n />\n <div class=\"main-container\">\n <Topbar/>\n <div class=\"main\">\n <SubSidebar/>\n <div class=\"main-content\">\n <RouterView v-slot=\"{ Component, route }\">\n <Transition name=\"slide-right\" mode=\"out-in\" appear>\n <KeepAlive :include=\"keepAliveStore.list\">\n <template v-if=\"pageErrorInfo\">\n <el-result icon=\"error\" title=\"系统提示\":sub-title=\"pageErrorInfo\">\n </el-result>\n </template>\n <MKAsyncComponentView v-else-if=\"!isLink\" :component=\"Component\" :key=\"route.fullPath\" />\n </KeepAlive>\n </Transition>\n </RouterView>\n <LinkView v-if=\"isLink\"/>\n </div>\n </div>\n <Copyright/>\n </div>\n </div>\n </div>\n <Search/>\n <HotkeysIntro/>\n <template v-if=\"enableAppSetting\">\n <div\n class=\"app-setting\"\n @click=\"eventBus.emit('global-app-setting-toggle')\"\n >\n <MKSvgIcon name=\"i-uiw:setting-o\" class=\"icon\"/>\n </div>\n <AppSetting/>\n </template>\n <BackTop/>\n </div>\n </SystemProvider>\n</template>\n\n<style lang=\"scss\" scoped>\n[data-mode=\"mobile\"] {\n .sidebar-container {\n transform: translateX(\n calc((var(--g-main-sidebar-width) + var(--g-sub-sidebar-width)) * -1)\n );\n\n &.show {\n transform: translateX(0);\n }\n }\n\n .main-container {\n margin-left: 0 !important;\n }\n\n &[data-menu-mode=\"single\"] {\n .sidebar-container {\n transform: translateX(calc(var(--g-sub-sidebar-width) * -1));\n\n &.show {\n transform: translateX(0);\n }\n }\n }\n}\n\n.layout {\n height: 100%;\n}\n\n#app-main {\n width: 100%;\n height: 100%;\n margin: 0 auto;\n}\n\n.wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n transition: padding-top 0.3s;\n\n .sidebar-container {\n position: fixed;\n top: 0;\n bottom: 0;\n z-index: 1010;\n display: flex;\n width: calc(\n var(--g-main-sidebar-actual-width)\n );\n transition: width 0.3s, transform 0.3s, box-shadow 0.3s, top 0.3s;\n\n &:has(> .main-sidebar-container.main-sidebar-enter-active),\n &:has(> .main-sidebar-container.main-sidebar-leave-active) {\n overflow: hidden;\n }\n }\n\n .sidebar-mask {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1000;\n width: 100%;\n height: 100%;\n visibility: hidden;\n background-image: radial-gradient(transparent 1px, rgb(0 0 0 / 30%) 1px);\n background-size: 4px 4px;\n backdrop-filter: saturate(50%) blur(4px);\n opacity: 0;\n transition: all 0.2s;\n\n &.show {\n visibility: visible;\n opacity: 1;\n }\n }\n\n .main-sidebar-container:not(.main-sidebar-leave-active) + .sub-sidebar-container {\n left: var(--g-main-sidebar-width);\n }\n\n .main-container {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n margin-left: calc(\n var(--g-main-sidebar-actual-width)\n );\n background-color: var(--g-bg);\n box-shadow: -1px 0 0 0 var(--g-border-color),\n 1px 0 0 0 var(--g-border-color);\n transition: margin-left 0.3s, background-color 0.3s, box-shadow 0.3s;\n\n .main {\n position: relative;\n flex: auto;\n height: 100%;\n overflow: hidden;\n transition: 0.3s;\n\n .main-content{\n margin-left: var(--g-sub-sidebar-width);\n height: 100%;\n }\n }\n\n .topbar-container.has-tabbar + .main {\n margin: var(--g-tabbar-height) 0 0;\n }\n\n .topbar-container.has-toolbar + .main {\n margin: var(--g-toolbar-height) 0 0;\n }\n\n .topbar-container.has-tabbar.has-toolbar + .main {\n margin: calc(var(--g-tabbar-height) + var(--g-toolbar-height)) 0 0;\n }\n }\n}\n\nheader:not(.header-leave-active) + .wrapper {\n padding-top: var(--g-header-height);\n\n .sidebar-container {\n top: var(--g-header-height);\n\n :deep(.sidebar-logo) {\n display: none;\n }\n }\n\n .main-container {\n .topbar-container {\n top: var(--g-header-height);\n }\n }\n}\n\n.app-setting {\n --at-apply: text-white dark-text-dark bg-ui-primary;\n\n position: fixed;\n top: calc(50% + 250px);\n right: 0;\n z-index: 10;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 50px;\n height: 50px;\n font-size: 24px;\n cursor: pointer;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n\n .icon {\n animation: rotate 5s linear infinite;\n }\n\n @keyframes rotate {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n}\n\n// 主内容区动画\n.slide-right-enter-active {\n transition: 0.2s;\n}\n\n.slide-right-leave-active {\n transition: 0.15s;\n}\n\n.slide-right-enter-from {\n margin-left: -20px;\n opacity: 0;\n}\n\n.slide-right-leave-to {\n margin-left: 20px;\n opacity: 0;\n}\n</style>\n","import { defineComponent } from \"vue\";\nimport Layout from './index.vue';\n\nexport default defineComponent({\n name: \"MKLayout\",\n setup() {\n return () => {\n return <Layout />;\n };\n },\n});\n","import { withInstall } from \"@maketribe/utils\";\nimport Layout from \"./layout\";\n\nexport const MKLayout = withInstall(Layout);\n\nexport default MKLayout;\n","import { encodePath } from \"ufo\";\n\nenum SegmentParserState {\n initial,\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface ScannedFile {\n path: string;\n module: any;\n}\n\nenum SegmentTokenType {\n static,\n dynamic,\n optional,\n catchall,\n}\n\ninterface SegmentToken {\n type: SegmentTokenType;\n value: string;\n}\n\nexport function generateRoutesFromFiles(files: ScannedFile[]) {\n const routes: any[] = [];\n\n for (const file of files) {\n const segments = file.path.split(\"/\");\n\n const route: Record<string, any> = {\n meta: {},\n ...file.module.mkRoute,\n key: \"\",\n path: \"\",\n component: async () => file.module,\n children: [],\n };\n\n let parent = routes;\n\n for (const segment of segments) {\n const tokens = parseSegment(segment);\n const segmentName = tokens.map(({ value }) => value).join(\"\");\n\n route.key += (route.key && \"/\") + segmentName;\n\n const path = route.path + getRoutePath(tokens).replace(/\\/index$/, \"/\");\n const child = parent.find(\n (parentRoute) =>\n parentRoute.key === route.key && parentRoute.path === path\n );\n\n if (child && child.children) {\n parent = child.children;\n route.path = \"\";\n } else if (segmentName === \"index\" && !route.path) {\n route.path += \"/\";\n } else if (segmentName !== \"index\") {\n route.path += getRoutePath(tokens);\n }\n }\n\n route.path = file.module.mkRoute?.path || route.path;\n\n parent.push(route);\n }\n\n return prepareRoutes(routes);\n}\n\nfunction getRoutePath(tokens: SegmentToken[]) {\n return tokens.reduce((path, token) => {\n return (\n path +\n (token.type === SegmentTokenType.optional\n ? `:${token.value}?`\n : token.type === SegmentTokenType.dynamic\n ? `:${token.value}()`\n : token.type === SegmentTokenType.catchall\n ? `:${token.value}(.*)*`\n : encodePath(token.value).replace(/:/g, \"\\\\:\"))\n );\n }, \"/\");\n}\n\nconst PARAM_CHAR_RE = /[\\w\\d_.]/;\n\nfunction parseSegment(segment: string) {\n let state: SegmentParserState = SegmentParserState.initial;\n\n let i = 0;\n\n let buffer = \"\";\n const tokens: SegmentToken[] = [];\n\n function consumeBuffer() {\n if (!buffer) {\n return;\n }\n\n if (state === SegmentParserState.initial) {\n throw new Error(\"错误的状态\");\n }\n\n tokens.push({\n type:\n state === SegmentParserState.static\n ? SegmentTokenType.static\n : state === SegmentParserState.dynamic\n ? SegmentTokenType.dynamic\n : state === SegmentParserState.optional\n ? SegmentTokenType.optional\n : SegmentTokenType.catchall,\n value: buffer,\n });\n\n buffer = \"\";\n }\n\n while (i < segment.length) {\n const c = segment[i];\n\n switch (state) {\n case SegmentParserState.initial:\n buffer = \"\";\n\n if (c === \"[\") {\n state = SegmentParserState.dynamic;\n } else {\n i--;\n state = SegmentParserState.static;\n }\n\n break;\n case SegmentParserState.static:\n if (c === \"[\") {\n consumeBuffer();\n state = SegmentParserState.dynamic;\n } else {\n buffer += c;\n }\n break;\n case SegmentParserState.catchall:\n case SegmentParserState.dynamic:\n case SegmentParserState.optional:\n if (buffer === \"...\") {\n buffer = \"\";\n state = SegmentParserState.catchall;\n }\n\n if (c === \"[\" && state === SegmentParserState.dynamic) {\n state = SegmentParserState.optional;\n }\n\n if (\n c === \"]\" &&\n (state !== SegmentParserState.optional || segment[i - 1] === \"]\")\n ) {\n if (!buffer) {\n throw new Error(\"空参数\");\n }\n consumeBuffer();\n state = SegmentParserState.initial;\n } else if (PARAM_CHAR_RE.test(c)) {\n buffer += c;\n }\n break;\n }\n\n i++;\n }\n\n if (state === SegmentParserState.dynamic) {\n throw new Error(`Unfinished param \"${buffer}\"`);\n }\n\n consumeBuffer();\n\n return tokens;\n}\n\nfunction findRouteByKey(key: string, routes: any[]): any | undefined {\n for (const route of routes) {\n if (route.key === key) {\n return route;\n }\n }\n return findRouteByKey(key, routes);\n}\n\nfunction prepareRoutes(routes: any[], parent?: any, keys = new Set<string>()) {\n for (const route of routes) {\n // Remove -index\n if (route.key) {\n route.key = route.key.replace(/\\/index$/, \"\").replace(/\\//g, \"-\");\n\n if (keys.has(route.key)) {\n const existingRoute = findRouteByKey(route.key, routes);\n const extra = existingRoute?.name\n ? `is the same as \\`${existingRoute.file}\\``\n : \"is a duplicate\";\n console.warn(\n `Route name generated for \\`${route.file}\\` ${extra}. You may wish to set a custom name using \\`definePageMeta\\` within the page file.`\n );\n }\n }\n\n route.path = route.path.replace(/\\/\\//g, \"/\");\n\n // Remove leading / if children route\n if (parent && route.path.startsWith(\"/\")) {\n route.path = route.path.slice(1);\n }\n\n if (route.children?.length) {\n route.children = prepareRoutes(route.children, route, keys);\n }\n\n // if (route.children?.find((childRoute: any) => childRoute.path === \"\")) {\n // delete route.key;\n // }\n\n if (route.key) {\n keys.add(route.key);\n }\n }\n\n return routes;\n}\n","import { createPinia } from \"pinia\"\n\nconst pinia = createPinia()\n\nexport default pinia\n","import {App, reactive} from \"vue\";\nimport FloatingVue from 'floating-vue'\nimport 'floating-vue/dist/style.css'\nimport 'overlayscrollbars/overlayscrollbars.css';\nimport {\n createRouter,\n createWebHashHistory,\n Router as VueRouter,\n} from \"vue-router\";\nimport {DataTableHeaderComponents, MkModule, MSAppClient} from \"./core\";\nimport {HttpRequest, WebHttpRequest} from \"@maketribe/request\";\nimport {MSAPPCLIENT_CONTEXT_KEY} from \"./constants\";\nimport {installer} from \"./installer\";\nimport {MKRichTextEditor} from \"./components\"\n\nimport {generateRoutesFromFiles} from \"./utils\";\nimport {\n DataFilterComponents,\n DataFormComponents,\n DataTableComponents,\n} from \"./core\";\nimport pinia from './layouts/store'\n\nexport type InitMsApplicationOptions = {\n routes: any;\n vueRouter?: VueRouter | 'hash' | 'history';\n app: App;\n appID: string;\n logo?: string;\n projectName?: string;\n modules: Array<MkModule>,\n locale?: string;\n /**\n * 请求实例\n */\n httpRequest?: HttpRequest;\n /**\n * ui 设置\n */\n uiSettings?: Record<string, any>;\n};\n\n/**\n * 初始化应用\n * @param options\n */\nexport const initApplication = async (options: InitMsApplicationOptions) => {\n const app = options.app;\n\n app.use(installer);\n app.use(FloatingVue);\n app.use(pinia);\n app.use(MKRichTextEditor);\n // 默认路由\n const vueRouter = options.vueRouter === undefined || options.vueRouter === \"hash\" || options.vueRouter === \"history\" ?\n createRouter({\n history: options.vueRouter === \"hash\" ? createWebHashHistory() : createWebHashHistory(),\n routes: [],\n }): options.vueRouter ;\n\n const msAppClient = reactive(\n new MSAppClient({\n app,\n appID: options!.appID,\n logo: options!.logo ?? \"\",\n projectName: options!.projectName ?? \"\",\n httpRequest: options.httpRequest ?? new WebHttpRequest(),\n origin: location.origin,\n locale: options!.locale,\n vueRouter,\n settings: options.uiSettings,\n dataTableComponents: new DataTableComponents(),\n dataTableHeaderComponents: new DataTableHeaderComponents(),\n dataFormComponents: new DataFormComponents(),\n dataFilterComponents: new DataFilterComponents(),\n whereFilterComponents: new DataFilterComponents(),\n })\n ) as unknown as MSAppClient;\n\n options.modules.forEach(module => msAppClient.addModule(module));\n\n app.provide(MSAPPCLIENT_CONTEXT_KEY, {msAppClient});\n\n MSAppClient.instance = msAppClient;\n\n (window as any).msAppClient = msAppClient;\n\n const routes = generateRoutesFromFiles(\n Object.keys(options.routes).map((key) => {\n return {\n path: key.replace(/^\\.\\/pages\\/(.+)\\.vue$/, (_, g) => g),\n module: options.routes[key]?.default || options.routes[key],\n };\n })\n );\n\n msAppClient.pageManager.afterInitdEvent.on(() => {\n for (const route of routes) {\n if (route.key.startsWith(\"index\")) {\n msAppClient.pageManager.addExtendsPage(route);\n }\n else {\n msAppClient.pageManager.addNormalPage(route);\n }\n }\n });\n\n await msAppClient.init();\n\n app.use(msAppClient.vueRouter);\n\n return msAppClient;\n};\n","import { DATA_MODEL_NAME } from \"./constants\";\nimport { DataModelDefines, DataTableClass } from \"./core\";\n\nexport const defineDataTable = <T extends DataTableClass>(\n DataTableClass: T\n): T => {\n DataModelDefines.instance.registerDataTableDefine(\n (DataTableClass as any)[DATA_MODEL_NAME] as string,\n DataTableClass\n );\n\n return DataTableClass;\n};\n","// import { DATA_MODEL_NAME } from \"./constants\";\nimport { DataFormClass, DataModelDefines } from \"./core\";\nimport { DATA_MODEL_NAME } from \"./constants\";\n\nexport const defineDataForm = <T extends DataFormClass>(\n DataFormClass: T\n): T => {\n DataModelDefines.instance.registerDataFormDefine(\n (DataFormClass as any)[DATA_MODEL_NAME] as string,\n DataFormClass\n );\n\n return DataFormClass;\n};\n","import { DATA_MODEL_NAME } from \"./constants\";\nimport { DataTreeClass, DataModelDefines } from \"./core\";\n\nexport const defineDataTree = <T extends DataTreeClass>(\n DataTreeClass: T\n): T => {\n DataModelDefines.instance.registerDataTreeDefine(\n (DataTreeClass as any)[DATA_MODEL_NAME] as string,\n DataTreeClass\n );\n\n return DataTreeClass;\n};\n","import \"virtual:uno.css\";\nimport \"../style/index.scss\";\nimport \"./assets/iconfonts/ms.js\";\nimport \"./assets/iconfonts/doc-editor.js\";\n\nexport * from \"./constants\";\n\nexport * from \"./core\";\n\nimport { installer } from \"./installer\";\n\nexport * from \"./layouts\";\nexport * from \"./composables\";\nexport * from \"./components\";\n\nexport const install = installer.install;\nexport const version = installer.version;\n\nexport * from \"./application.ts\";\nexport * from \"./define-data-table\";\nexport * from \"./define-data-form\";\nexport * from \"./define-data-tree\";\nexport * from './dataviews'\n"],"names":["a","h","t","MenuType","MenuUrlType","RegionLevel","LoginLogType","Components","defineAsyncComponent","ElInput","ElInputNumber","Operator","path","Disposable","Event","list","menus","index","vueRouter","createDisposable","uid","ACCESS_TOKEN_HEADER","X_ACCESS_TOKEN_HEADER","AUTHORIZATION","AUTHORIZATION_PREFIX","X_AUTHORIZATION","code","md5","reactive","DataTable","DataForm","ref","getCurrentInstance","inject","computed","unref","provide","buildProps","I18n","_isSlot","s","Object","prototype","toString","call","_isVNode","name","inheritAttrs","props","configProviderProps","setup","slots","provideGlobalConfig","currentLocale","i18n","currentLanguage","_slot","_createVNode","ElConfigProvider","renderSlot","default","withInstall","components","componentProps","watch","columnComponentInfo","ComponentsCombine","isWhereFilter","Messager","isRef","_","onBeforeUnmount","isShowDataForm","Dialoger","defineStore","defaultsDeep","menu","item","defaultOpenedPaths","vueRoute","FormColumn","DataTree","valueFormColumn","RefreshButton","AddButton","TableHeaderItem","FilterColumn","TableColumn","TableActionColumn","Where","WebFileUpload","UploadError","DvOpt","isEqual","DataFormType","ActionButton","EditButton","DeleteButton","RouteNameInput","MsRouteTable","DATA_MODEL_NAME","constructor","options","moduleName","MODULE_NAME","actionColumn","initialize","dataFilter","setColumns","label","componentInfo","setReady","formatItem","id","title","menuId","iconName","route","memo","defineComponent","modelValue","selections","handleClick","SvgIcon","buttonProps","emits","buttonEmits","emit","icon","MKSvgIcon","text","ElButton","type","link","dataTableSelectProps","dataTableSelectEmits","abstractSelectInstance","dataTable","get","set","v","multiple","setSelectionColumn","TableSelectCacheColumn","immediate","handleMousedown","disabled","value","setSelection","result","dataTableSelectDialog","isConfirm","setSelections","MKAbstractSelect","el","objectValue","labelFieldName","primaryFieldName","formatOptions","queryMode","selectRecords","dataLoading","map","_withDirectives","ElSelect","Grid","_resolveDirective","dataSelectProps","dataSelectEmit","loading","initd","init","load","beforeFilterValue","filterMethod","debounce","filterFieldNames","length","useCondition","group","clear","fieldName","addCondition","children","ElOption","allowCreate","filterable","clearable","paginationProps","total","Number","required","currentPage","pageSize","pageSizes","Array","paginationEmits","handleCurrentPageChange","handlePageSizeChange","_createTextVNode","ElPagination","datePickerProps","datePickerEmits","datePickerTypes","includes","valueFormat","ElDatePicker","iconSelectProps","iconSelectEmits","icons","searchIconValue","filteredIcons","search","toLowerCase","trim","filter","formItem","elFormItem","elUseFormItem","handleLinkClick","window","open","onMounted","svgList","document","querySelectorAll","iconList","svg","from","symbols","concat","symbol","replace","Set","validate","flush","selectIconValue","onClick","fontSize","size","ElPopover","reference","opacity","_Fragment","suffix","ElScrollbar","FREE_RATIO","BASE64_PREFIX","imageCropperContentProps","imageCropperContentEmits","cropperRef","outputType","base64Match","src","match","url","URL","location","origin","lastIndexOf","slice","ratioOptions","width","height","autoCropWidth","maxWidth","autoCropHeight","maxHeight","currentRatio","enlarge","cropW","cropH","ratio","cropRatio","setCurrentRatio","isFixed","fixedNumber","option","find","image","Image","onload","naturalWidth","naturalHeight","handleRotateLeft","rotateLeft","handleRotateRight","rotateRight","setCropperRef","render","$props","$slots","ratioOptionsVNodes","ratioOption","VueCropper","fixedBox","ElTooltip","ElForm","ElFormItem","tools","ImageCropper","Promise","resolve","imageCropperContentEl","handleCancelClick","dialogInstance","destroy","data","handleConfirmClick","getCropData","bind","customRender","onClose","body","ImageCropperContent","footer","MKImageCropper","dataRef","formItems","condition","component","resolveComponent","defaultSlot","dt","prop","labelPosition","model","labelWidth","style","overflow","padding","Fragment","showEditPanel","moduleOptons","showDynamicFormDialoger","showModuleSelectPanel","selectComponentOption","class","ElCollapse","ElCollapseItem","PageEditor","shallowReactive","VisualPageEditor","ViewDevice","module","l","watchEffect","onUnmounted","OverflowNode","$rootTextContent","mergeRegister","$dfs","$isOverflowNode","selection","$getSelection","$isRangeSelection","$isTextNode","$isLeafNode","$setSelection","$createOverflowNode","COMMAND_PRIORITY_HIGH","readonly","$isRootTextContentEmptyCurry","ElementNode","DecoratorNode","createCommand","$createParagraphNode","$copyNode","$isElementNode","ArtificialNode__DO_NOT_USE","$createLineBreakNode","$isBlockElementNode","isInlineDomNode","isBlockDomNode","$isRootOrShadowRoot","$cloneWithProperties","$sliceSelectedTextNodeContent","isHTMLElement","$getRoot","showLinkEditDialog","href","reject","hrefValue","$event","prepend","dataFormItemProps","useSlots","dataFormContext","DATA_FORM_CONTEXT_KEY","dataForm","_formColumn","existFormColumn","getColumn","formColumn","existingColumn","onCleanup","addColumn","removeColumn","useFormColumnComponent","useFormDisabled","getValue","setValue","itemStyle","DATA_FORM_ITEM_CONTEXT_KEY","column","_component","FormColumnComponent","toRaw","_mergeProps","formProps","formUID","formEl","columns","getColumns","visible","rules","rule","message","componentRules","isArray","Math","max","apply","formModels","push","validateField","reset","resetFields","clearValidate","disposable","dataFormTypeChangeEvent","on","dataFormType","NONE","nextTick","findIndex","formModel","splice","dispose","MKDataFormItem","useRoute","PagePanel","formViewProps","isUpdateForm","getDataFormType","UPDATE","isChange","isChanged","pageFormStyle","handleSave","simpleSubmit","handleCancel","cancel","saveBtn","allowSubmit","instance","translate","mode","MKPagePanel","MKForm","header","_resolveComponent","meta","extra","ElCard","createDataForm","columnProps","useRouter","query","aesEncrypt","isEmpty","aesDecrypt","dataTablePaginationProps","dataTableContext","DATA_TABLE_CONTEXT_KEY","MKPagination","totalRecCount","pageTo","setPageSize","dataTableColumnProps","tableColumn","useTableColumnComponent","TableColumnComponent","row","tableProps","treeProps","dataTableEl","tableEl","rowKey","primaryKey","getList","selectionColumn","handleSortChange","order","orderType","OrderType","DESC","ASC","sorter","setColumnSort","allowChangeSelection","handleSelectionChange","items","_tableEl","getSelection","tableSelections","getSelectionRows","sort","clearSelection","selectedRows","toggleRowSelection","sortableInstance","Sortable","create","querySelector","handle","animation","onEnd","event","newIndex","oldIndx","oldIndex","sourceItem","dropItem","sortAction","moveTarget","minWidth","fixed","align","reserveSelection","sortable","ElTableColumn","scope","$index","MKDataTableColumn","ElTable","lazy","defaultExpandAll","empty","ElEmpty","InnerTableHeaderItem","tableHeaderItem","defaultDataTableHeaderComponents","useGlobalConfig","useRenderInfoComponent","TableHeaderItemComponent","String","tableHeader","leftArea","predicate","rightArea","leftItems","classifySearchItems","rightItems","content","tableViewProps","isTree","pagination","MKDataTablePagination","renderSlots","showHeader","MKTableHeader","MKTable","classifySearchItemProps","classifySearchItemEmits","_modelValue","labelStyle","tags","isSelect","ElTag","classifySearch","_classifySearch","getClassifySearchItems","MKTableClassifySearchItem","getParam","setParam","undefined","tableTreeProps","dataTree","hasChildren","handleLoad","node","treeEmits","treeRef","rootNodes","currentNodeKey","setCurrentKey","afterLoadEvent","handleAdd","dataTreeNode","addRecord","pid","handleEdit","editRecord","handleDelete","deleteRecord","level","handleCurrentChange","_dataTree","allowSelectContainer","isLeaf","current","handleNodeDrop","draggingNode","dropNode","dropType","handleNodeClick","innerDataTree","filterNodeMethod","ElTree","draggable","main","e","stopPropagation","treeViewProps","searchInputValue","MKTree","Search","ElMessageBox","materialGroupTree","MsMaterialGroupTree","materialGroupForm","MsMaterialGroupForm","MKDataForm","handleAddClick","parent","setData","parentGroupId","handleEditClick","handleDeleteClick","confirm","then","deleteAfterRefresh","ElMessage","error","msg","MaterialGroupFormPopover","Plus","MKDataTable","node-tools","preventDefault","ElIcon","Edit","Delete","RATIO_OPTIONS","materialListProps","webFileUpload","defaultMaterialTable","MsMaterialTable","materialTable","materialTypes","getMaterialTypes","currentMaterialType","currentMaterialTypeId","materialList","afterInitdEvent","setAllowMaterialTypeValues","allowMaterialTypeValues","deleteDisposable","deleteRecordEvent","selectionChangeEvent","ids","handleMaterialTypeClick","materialType","setCurrentMaterialType","handleMaterialItemClick","material","selectable","handleMoveClick","dataFormDialog","recId","materialForm","handleCutClick","cropperResult","handleOverrideClick","blob","base64ToBlob","uploadResponse","upload","File","desc","response","createInstance","save","handleNewClick","handleDownload","handleSelectFile","file","fileSelect","accept","materialTypeVNodes","className","currentMaterialTypeVNode","limit","materialListVNodes","MaterialItem","MaterialGroup","AsyncComponentView","selectState","imageUpload","indexOf","random","Error","ImageEditPanelComponent","expose","attrs","margin","r","b","vals","split","handleMaterialSelect","selectImage","fileRender","FileReader","target","readAsDataURL","getResult","setSrc","materialPanelVisible","activeTabName","ImageView","ElImage","Picture","panel","ElTabs","ElTabPane","UploadFilled","MKAsyncComponentView","MKMaterialList","Share","ElRow","ElCol","alt","rows","showImageEditDialog","imageEditPanelRef","editResult","toCropImageHandle","nextBtns","showModuleSelectDialog","namespace","modules","useLexicalEditorContext","selectOption","clickHandle","templateListComponent","cover","showTemplateSelectDialog","templates","showHtmlTemplateDialog","contentInputValue","minRows","maxRows","createEditor","FORMAT_TEXT_COMMAND","FORMAT_ELEMENT_COMMAND","TOGGLE_LINK_COMMAND","$patchStyleText","$setBlocksType","$createHeadingNode","CAN_UNDO_COMMAND","CAN_REDO_COMMAND","$findMatchingParent","$isHeadingNode","$getSelectionStyleValueForProperty","$isLinkNode","$isNodeSelection","UNDO_COMMAND","REDO_COMMAND","$getNodeByKey","$createNodeSelection","$getNextRightPreorderNode","HeadingNode","TextNode","createEmptyHistoryState","registerHistory","KEY_TAB_COMMAND","OUTDENT_CONTENT_COMMAND","INDENT_CONTENT_COMMAND","COMMAND_PRIORITY_EDITOR","$isParagraphNode","shallowRef","CLICK_COMMAND","SELECTION_CHANGE_COMMAND","$isRootNode","ElLoading","$insertNodeToNearestRoot","AutoLinkNode","LinkNode","CodeHighlightNode","CodeNode","QuoteNode","COMMAND_PRIORITY_LOW","DRAG_DROP_PASTE","mediaFileReader","isMimeType","$toggleLink","hashtag","$createHashtagNode","HashtagNode","registerLexicalTextEntity","$createListNode","$createListItemNode","$isListItemNode","ListNode","ListItemNode","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","removeList","INSERT_PARAGRAPH_COMMAND","$handleListInsertParagraph","$getNearestNodeFromDOMNode","$isListNode","INSERT_CHECK_LIST_COMMAND","insertList","KEY_ARROW_DOWN_COMMAND","KEY_ARROW_UP_COMMAND","KEY_ESCAPE_COMMAND","KEY_SPACE_COMMAND","KEY_ARROW_LEFT_COMMAND","TableCellNode","TableNode","TableRowNode","$getNodeTriplet","$computeTableMap","$isTableRowNode","$isTableCellNode","$createTableCellNode","$insertFirst","applyTableHandlers","$nodesOfType","$isTableNode","INSERT_TABLE_COMMAND","$createTableNodeWithDimensions","$canShowPlaceholderCurry","Teleport","registerRichText","registerPlainText","registerDragonSupport","dialogInstances","dialogImplInstance","implInstance","dialogInstanceCreateEvent","isFunction","destroyEvent","once","handleClose","onCancel","handleConfirm","onConfirm","dialogs","ConfigProvider","ElDialog","cancelButtonText","confirmButtonText","textProps","copyContainer","copyHandle","copyText","copyContent","innerText","navigator","clipboard","input","createElement","appendChild","select","execCommand","removeChild","writeText","success","copy","cursor","Text","verifyDialogProps","verifyDialogEmits","wrapperEl","buttonEl","grandEl","httpRequest","useHttpRequest","slideWidth","isError","deg","imageUrl","imageStyle","backgroundImage","transform","loadImage","params","scene","responseType","Blob","createObjectURL","handleSwitchConfirm","handleMouseDown","mouseDownEvent","startX","MouseEvent","clientX","touches","totalWidth","getBoundingClientRect","handleMouseMove","moveX","min","floor","handleMouseUp","addEventListener","register","removeEventListener","fail","setTimeout","OpenVerifyCode","VerifyPanel","LoadingManager","ResourceManager","_hoisted_1","_createElementVNode","_hoisted_3","_hoisted_13","_hoisted_2","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_openBlock","_createBlock","_Transition","_withCtx","selectLocalFile","FileView","ElAlert","MKFileSelect","catch","filePath","viewFileInfo","viewFileLoading","localSelectHandle","round","imageOptions","cutWidth","cutHeight","hideLocal","ResourceSelect","resourceManager","MKResourceList","selectResourceList","isDirectory","confirmed","MsMenuTree","sortFieldName","allowBindRoute","Menu","urlType","Inner","routeTitle","targetUrl","MKText","routes","modifyBindRoute","MKListItem","ElCheckbox","routeId","routeName","mapping","Container","SystemSettings","Outer","rowData","getRoutePath","pageRoute","MSAppClient","pageManager","extendsPages","nodeHasChildren","loadAll","FormDetailColumn","postTraverse","permissionPointDefine","roleMenu","borderRadius","avatar","nickName","account","email","roles","role","MsMemberTable","activeDialog","activeMemberForm","MsMemberForm","formatSubmitData","valid","Reflect","deleteProperty","initActiveMemberForm","isSuperAdmin","userSession","userInfo","isSuper","ImportButton","defaultValue","MemberNickNameColumn","MemberRolesColumn","buttons","handler","member","loadingManager","startLoading","dataViewRequest","callDVRequest","action","console","completeLoading","update","isLock","errorCount","unlockDatetime","beforeSubmitEvent","approveMember","rolesColumn","valueChangeEvent","getLoadingManager","_data","Memo","approveResult","MsMemberRoleTable","currentRole","memberRoleTable","memberTable","loadRequest","assign","excludeRoleIds","setCurrentRole","oldRole","setList","afterReadyEvent","TableHeaderButton","MsMessageNotifyTable","buttonGroup","Group","selectGroup","defaultGroup","addGroup","pn","pc","getLoadParams","cancelToken","CancelToken","loadCancel","handleNotification","notification","NotificationComponent","Notificationer","info","dangerouslyUseHTMLString","setReadType","readType","setCurrentPage","setMessageType","messageType","readAll","post","MsRequestLogTable","exportData","log","method","warning","contentString","JSON","stringify","MKJsonEditor","timeOperationElapsedMilliseconds","HttpRequest","DVQueryable","WebHttpRequest","createRouter","createWebHashHistory","SkeletonMessageSender","ElNotification","DialogerImpl","SkeletonDialoger","prompt","promptResult","alert","visibleChangeEvent","custom","actionColumnName","dataFormOptions","customDataFormStatus","confirmText","cancelText","importDataFormDialog","template","fileSelectHandle","fileList","postFiles","raw","display","ElUpload","downloadHandle","click","importResultTableDialog","filed","cols","successSlot","isSuccess","makeInstaller","version","createVNode","_sfc_render","_createElementBlock","useFullscreen","selectValue","buttonName","MKMessage","messageNotifyTable","DataModelDefines","getDataTable","showMessageList","num","connection","SignalR","HubConnectionBuilder","withUrl","accessTokenFactory","accessToken","localStorage","getItem","transport","HttpTransportType","LongPolling","withAutomaticReconnect","nextRetryDelayInMilliseconds","val","arr","previousRetryCount","build","start","err","onclose","getUnreadMessageNum","messageIcon","toolItem","ElBadge","MessageList","useTimeoutFn","useElementSize","useMagicKeys","onBeforeUpdate","breadcrumbList","compile","cloneDeep","useClipboard","msAppClient","useMSAppClient","ready","currentRoute","router","tabs","routeInfo","getRouteByName","setCurrentMenuNode","setCurrentTab","menuNode","findMenuNodeByID","tab","findTabByID","fullPath","createTab","affix","matched","realRoute","switchTab","MKConfigProvider","dataTableComponents","dataFormComponents","dataFilterComponents","whereFilterComponents","dataTableHeaderComponents","onErrorCaptured","Layout","encodePath","createPinia","DataTableClass","DataFormClass","DataTreeClass"],"mappings":"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"}