m8-framework-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +175 -0
  2. package/build/index.js +963 -0
  3. package/docs/ejs-doc/404/404.html +9 -0
  4. package/docs/ejs-doc/_draft/sha1_salt.md +47 -0
  5. package/docs/ejs-doc/_include/config.php +10 -0
  6. package/docs/ejs-doc/_include/cssboot.inc.php +62 -0
  7. package/docs/ejs-doc/_include/jsboot.inc.php +7 -0
  8. package/docs/ejs-doc/api_app/api_app.md +43 -0
  9. package/docs/ejs-doc/api_audio/api_audio.md +225 -0
  10. package/docs/ejs-doc/api_auth/api_auth.md +256 -0
  11. package/docs/ejs-doc/api_basicCard/api_basicCard.md +69 -0
  12. package/docs/ejs-doc/api_card_ui/api_card_ui.md +37 -0
  13. package/docs/ejs-doc/api_contact/api_contact.md +295 -0
  14. package/docs/ejs-doc/api_contact/images/component_contact.jpg +0 -0
  15. package/docs/ejs-doc/api_device/api_device.md +761 -0
  16. package/docs/ejs-doc/api_event/api_event.md +244 -0
  17. package/docs/ejs-doc/api_global/api_global.md +440 -0
  18. package/docs/ejs-doc/api_io/api_io.md +369 -0
  19. package/docs/ejs-doc/api_miniH5/api_miniH5.md +279 -0
  20. package/docs/ejs-doc/api_navigator/api_navigator.md +654 -0
  21. package/docs/ejs-doc/api_navigator/images/navigator.backbtn.png +0 -0
  22. package/docs/ejs-doc/api_navigator/images/navigator.hide.png +0 -0
  23. package/docs/ejs-doc/api_navigator/images/navigator.hidestatus.png +0 -0
  24. package/docs/ejs-doc/api_navigator/images/navigator.leftarrowbtn.jpg +0 -0
  25. package/docs/ejs-doc/api_navigator/images/navigator.leftbtn.png +0 -0
  26. package/docs/ejs-doc/api_navigator/images/navigator.leftbtnimg.png +0 -0
  27. package/docs/ejs-doc/api_navigator/images/navigator.multititle.jpg +0 -0
  28. package/docs/ejs-doc/api_navigator/images/navigator.rightbtn.png +0 -0
  29. package/docs/ejs-doc/api_navigator/images/navigator.rightbtn2.png +0 -0
  30. package/docs/ejs-doc/api_navigator/images/navigator.rightbtnimg.png +0 -0
  31. package/docs/ejs-doc/api_navigator/images/navigator.rightbtnimg2.png +0 -0
  32. package/docs/ejs-doc/api_navigator/images/navigator.rightmenu.png +0 -0
  33. package/docs/ejs-doc/api_navigator/images/navigator.searchbar.png +0 -0
  34. package/docs/ejs-doc/api_navigator/images/navigator.subtitle.jpg +0 -0
  35. package/docs/ejs-doc/api_navigator/images/navigator.title.png +0 -0
  36. package/docs/ejs-doc/api_page/api_page.md +261 -0
  37. package/docs/ejs-doc/api_runtime/api_runtime.md +788 -0
  38. package/docs/ejs-doc/api_storage/api_storage.md +320 -0
  39. package/docs/ejs-doc/api_stream/api_stream.md +152 -0
  40. package/docs/ejs-doc/api_stream/images/body_multiform.jpg +0 -0
  41. package/docs/ejs-doc/api_ui/api_ui.md +836 -0
  42. package/docs/ejs-doc/api_ui/images/ui.popwindow.png +0 -0
  43. package/docs/ejs-doc/api_ui/images/ui_actionsheet.png +0 -0
  44. package/docs/ejs-doc/api_ui/images/ui_alert.png +0 -0
  45. package/docs/ejs-doc/api_ui/images/ui_confirm.png +0 -0
  46. package/docs/ejs-doc/api_ui/images/ui_pickDateTime.png +0 -0
  47. package/docs/ejs-doc/api_ui/images/ui_pickdate.png +0 -0
  48. package/docs/ejs-doc/api_ui/images/ui_pickmonth.png +0 -0
  49. package/docs/ejs-doc/api_ui/images/ui_picktime.png +0 -0
  50. package/docs/ejs-doc/api_ui/images/ui_poppicker.png +0 -0
  51. package/docs/ejs-doc/api_ui/images/ui_poppicker2.png +0 -0
  52. package/docs/ejs-doc/api_ui/images/ui_poppicker3.png +0 -0
  53. package/docs/ejs-doc/api_ui/images/ui_prompt.png +0 -0
  54. package/docs/ejs-doc/api_ui/images/ui_select.png +0 -0
  55. package/docs/ejs-doc/api_ui/images/ui_select2.png +0 -0
  56. package/docs/ejs-doc/api_ui/images/ui_select3.png +0 -0
  57. package/docs/ejs-doc/api_ui/images/ui_showdebugdialog.png +0 -0
  58. package/docs/ejs-doc/api_ui/images/ui_showwaiting.png +0 -0
  59. package/docs/ejs-doc/api_ui/images/ui_toast.png +0 -0
  60. package/docs/ejs-doc/api_ui/images/ui_toastAndEvent.png +0 -0
  61. package/docs/ejs-doc/api_util/api_util.md +615 -0
  62. package/docs/ejs-doc/api_util/images/util.playvideo.png +0 -0
  63. package/docs/ejs-doc/api_util/images/util.previmage.png +0 -0
  64. package/docs/ejs-doc/api_util/images/util.selectfile.png +0 -0
  65. package/docs/ejs-doc/api_util/images/util.selectimage.png +0 -0
  66. package/docs/ejs-doc/authentication/authentication.md +28 -0
  67. package/docs/ejs-doc/changelog/changelog.md +290 -0
  68. package/docs/ejs-doc/component_invokeplugin/component_invokeplugin.md +54 -0
  69. package/docs/ejs-doc/component_outline/component_outline.md +71 -0
  70. package/docs/ejs-doc/guid_apiconstraint/guid_apiconstraint.md +30 -0
  71. package/docs/ejs-doc/guid_debugpage/guid_debugpage.md +53 -0
  72. package/docs/ejs-doc/guid_debugpage/images/client.jpg +0 -0
  73. package/docs/ejs-doc/guid_debugpage/images/room.png +0 -0
  74. package/docs/ejs-doc/guid_demodebug/guid_demodebug.md +59 -0
  75. package/docs/ejs-doc/guid_demodebug/images/qr_demo.png +0 -0
  76. package/docs/ejs-doc/guid_demodebug/images/qrcode-weex.png +0 -0
  77. package/docs/ejs-doc/guid_demodebug/images/qrcode.png +0 -0
  78. package/docs/ejs-doc/guid_demodebug/images/qrcode_ejs.png +0 -0
  79. package/docs/ejs-doc/guid_errorcode/guid_errorcode.md +27 -0
  80. package/docs/ejs-doc/guid_errorcode/images/5d38937fec5107c38502c3ee38ba5b2c.png +0 -0
  81. package/docs/ejs-doc/guid_getstart/guid_getstart.md +188 -0
  82. package/docs/ejs-doc/introduction/introduction.md +29 -0
  83. package/docs/ejs-doc/jsapi_h5_all/jsapi_h5_all.md +1231 -0
  84. package/docs/ejs-doc/jsapi_mini_all/jsapi_mini_all.md +1105 -0
  85. package/docs/ejs-doc/m7_mini_h5/images/001.png +0 -0
  86. package/docs/ejs-doc/m7_mini_h5/images/dev.png +0 -0
  87. package/docs/ejs-doc/m7_mini_h5/images/install.png +0 -0
  88. package/docs/ejs-doc/m7_mini_h5/images/mobile_dev.png +0 -0
  89. package/docs/ejs-doc/m7_mini_h5/images/setting.png +0 -0
  90. package/docs/ejs-doc/m7_mini_h5/images/update.png +0 -0
  91. package/docs/ejs-doc/m7_mini_h5/m7_mini_h5.md +410 -0
  92. package/docs/ejs-doc/promisesupport/promisesupport.md +84 -0
  93. package/docs/ejs-doc/structure/images/structure.jpg +0 -0
  94. package/docs/ejs-doc/structure/images/structure2.jpg +0 -0
  95. package/docs/ejs-doc/structure/structure.md +26 -0
  96. package/docs/ejs-doc/version/version.md +62 -0
  97. package/docs/m8mpdoc-develop/$navigation.md +343 -0
  98. package/docs/m8mpdoc-develop/000-/346/225/264/344/275/223/350/256/276/350/256/241/000-/346/241/206/346/236/266/347/256/200/344/273/213.md +61 -0
  99. package/docs/m8mpdoc-develop/000-/346/225/264/344/275/223/350/256/276/350/256/241/001-/346/241/206/346/236/266/346/236/266/346/236/204.md +60 -0
  100. package/docs/m8mpdoc-develop/000-/346/225/264/344/275/223/350/256/276/350/256/241/002-/347/233/256/345/275/225/345/217/212/346/226/207/344/273/266/347/273/204/347/273/207.md +106 -0
  101. package/docs/m8mpdoc-develop/000-/346/225/264/344/275/223/350/256/276/350/256/241/003-/345/206/205/347/275/256/347/254/254/344/270/211/346/226/271/345/272/223/350/257/264/346/230/216.md +25 -0
  102. package/docs/m8mpdoc-develop/000-/346/225/264/344/275/223/350/256/276/350/256/241/004-/345/267/245/347/250/213/350/207/252/345/256/232/344/271/211/351/205/215/347/275/256.md +97 -0
  103. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/000-/347/216/257/345/242/203/345/207/206/345/244/207.md +186 -0
  104. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/001-/345/237/272/347/241/200/350/257/255/346/263/225.md +218 -0
  105. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/002-Vue/347/273/204/344/273/266/344/273/213/347/273/215.md +139 -0
  106. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/004-VSCode/346/217/222/344/273/266.md +125 -0
  107. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/005-pages.md +300 -0
  108. package/docs/m8mpdoc-develop/0001-/345/211/215/346/234/237/345/207/206/345/244/207/006-manifest.md +173 -0
  109. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-CSS/350/257/255/346/263/225.md +217 -0
  110. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-ES6/346/224/257/346/214/201.md +14 -0
  111. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/344/273/200/344/271/210/346/230/257/346/235/241/344/273/266/347/274/226/350/257/221.md +176 -0
  112. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/345/274/200/345/217/221/350/247/204/350/214/203.md +167 -0
  113. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/345/274/225/347/224/250CSS.md +15 -0
  114. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/345/274/225/347/224/250JS.md +42 -0
  115. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/345/274/225/347/224/250/347/273/204/344/273/266.md +34 -0
  116. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/345/274/225/347/224/250/351/235/231/346/200/201/350/265/204/346/272/220.md +69 -0
  117. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/346/240/207/345/207/206js/345/222/214/346/265/217/350/247/210/345/231/250js/347/232/204/345/214/272/345/210/253.md +16 -0
  118. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/350/260/203/350/257/225.md +29 -0
  119. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/350/267/250/347/253/257/345/205/274/345/256/271.md +11 -0
  120. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/000-/350/277/220/350/241/214.md +50 -0
  121. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/001-/350/267/250/347/253/257/346/263/250/346/204/217.md +325 -0
  122. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/002-/346/241/206/346/236/266/350/216/267/345/217/226.md +38 -0
  123. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/002-/346/241/206/346/236/266/350/216/267/345/217/226vue3.md +39 -0
  124. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/003-/350/267/257/345/276/204/345/210/253/345/220/215.md +21 -0
  125. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/004-/345/274/200/345/247/213/345/274/200/345/217/221.md +105 -0
  126. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/005-/350/265/204/346/272/220/345/244/204/347/220/206/344/270/216/345/217/221/345/270/203.md +0 -0
  127. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/006-Boot/345/205/261/347/224/250/350/265/204/346/272/220.md +13 -0
  128. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/007-Config/344/270/232/345/212/241/351/205/215/347/275/256.md +325 -0
  129. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/008-/345/267/245/345/205/267/347/261/273/346/240/267/345/274/217.md +91 -0
  130. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/009-/347/224/237/345/221/275/345/221/250/346/234/237.md +119 -0
  131. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/009-/347/224/237/345/221/275/345/221/250/346/234/237vue3.md +100 -0
  132. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/010-/346/236/204/345/273/272.md +94 -0
  133. package/docs/m8mpdoc-develop/001-/351/241/265/351/235/242/345/274/200/345/217/221/011-/345/217/221/345/270/203.md +51 -0
  134. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/000-token/347/232/204/344/275/277/347/224/250.md +5 -0
  135. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/001-/344/273/243/347/240/201/350/247/204/350/214/203/350/207/252/345/212/250/346/243/200/346/265/213.md +0 -0
  136. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/002-/345/211/215/345/220/216/347/253/257/346/225/260/346/215/256/344/272/244/344/272/222/345/274/200/345/217/221/346/250/241/345/274/217.md +5 -0
  137. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/003-style-guide.md +23 -0
  138. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/003.1-style-guide-a.md +872 -0
  139. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/003.2-style-guide-b.md +1041 -0
  140. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/003.3-style-guide-c.md +489 -0
  141. package/docs/m8mpdoc-develop/002-/350/247/204/350/214/203/344/270/216/346/250/241/345/274/217/003.4-style-guide-d.md +372 -0
  142. package/docs/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205.md +247 -0
  143. package/docs/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205vue3.md +276 -0
  144. package/docs/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244.md +130 -0
  145. package/docs/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244vue3.md +115 -0
  146. package/docs/m8mpdoc-develop/004-EJS/347/233/270/345/205/263/000-EJS2.X.md +5 -0
  147. package/docs/m8mpdoc-develop/004-EJS/347/233/270/345/205/263/001-EJS3.X.md +5 -0
  148. package/docs/m8mpdoc-develop/004-EJS/347/233/270/345/205/263/001-EJS4.X.md +5 -0
  149. package/docs/m8mpdoc-develop/004-EJS/347/233/270/345/205/263/001-EJS4.Xmp.md +5 -0
  150. package/docs/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/000-/346/240/270/345/277/203/346/226/271/346/263/225.md +398 -0
  151. package/docs/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/001-Ajax/344/270/216/346/226/207/344/273/266/344/270/212/344/274/240.md +456 -0
  152. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/000-charset.md +128 -0
  153. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/001-base64.md +142 -0
  154. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/002-date.md +210 -0
  155. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/004-math.md +85 -0
  156. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/006-sha1.md +21 -0
  157. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/007-sha256.md +36 -0
  158. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/008-storage.md +128 -0
  159. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/009-string.md +148 -0
  160. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/010-Util/346/211/251/345/261/225/346/214/207/345/215/227.md +76 -0
  161. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/011-cookie.md +59 -0
  162. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/012-util-sm.md +95 -0
  163. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-1.baseapi.md +76 -0
  164. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.network.md +202 -0
  165. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.socketTask.md +92 -0
  166. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-3.uiapi.md +412 -0
  167. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-4.eventapi.md +146 -0
  168. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-5.otherapi.md +137 -0
  169. package/docs/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/014-util-mpVerifyManager.md +363 -0
  170. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/000-/347/273/204/344/273/266/345/272/223/344/270/213/350/275/275/344/275/277/347/224/250.md +188 -0
  171. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/001-actionsheet/345/212/250/344/275/234/351/235/242/346/235/277.md +460 -0
  172. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/004-amap/345/234/260/345/233/276.md +285 -0
  173. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/005-button/346/214/211/351/222/256.md +211 -0
  174. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/008-cell/345/215/225/345/205/203/346/240/274.md +213 -0
  175. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/009-checkbox/345/244/215/351/200/211/346/241/206.md +501 -0
  176. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/010-circle/347/216/257/345/275/242/350/277/233/345/272/246/346/235/241.md +168 -0
  177. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/011-datepicker/346/227/245/346/234/237/351/200/211/346/213/251.md +617 -0
  178. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/013-field/350/276/223/345/205/245/346/241/206.md +539 -0
  179. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/015-form/350/241/250/345/215/225.md +999 -0
  180. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/018-header/345/244/264/351/203/250/345/257/274/350/210/252/346/240/217.md +150 -0
  181. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/019-icon/345/233/276/346/240/207.md +133 -0
  182. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/020-loading/345/212/240/350/275/275.md +117 -0
  183. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/021-noticebar/351/200/232/347/237/245/346/240/217.md +152 -0
  184. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/022-numberkeyboard/346/225/260/345/255/227/351/224/256/347/233/230.md +427 -0
  185. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/023-pagination/345/210/206/351/241/265.md +212 -0
  186. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/024-panel/351/235/242/346/235/277.md +85 -0
  187. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/025-passwordinput/345/257/206/347/240/201/350/276/223/345/205/245/346/241/206.md +175 -0
  188. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/026-picker/351/200/211/346/213/251/345/231/250.md +519 -0
  189. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/027-popup/345/274/271/345/207/272/345/261/202.md +152 -0
  190. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/028-progress/350/277/233/345/272/246/346/235/241.md +103 -0
  191. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/029-radio/345/215/225/351/200/211/346/241/206.md +285 -0
  192. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/030-rate/350/257/204/345/210/206.md +189 -0
  193. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/031-search/346/220/234/347/264/242.md +217 -0
  194. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/032-slider/346/273/221/345/235/227.md +166 -0
  195. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/033-stepper/346/255/245/350/277/233/345/231/250.md +340 -0
  196. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/035-swipecell/346/273/221/345/212/250/345/215/225/345/205/203/346/240/274.md +265 -0
  197. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/036-switch/345/274/200/345/205/263.md +196 -0
  198. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/037-switchcell/345/274/200/345/205/263/345/215/225/345/205/203/346/240/274.md +115 -0
  199. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/038-tag/346/240/207/350/256/260.md +232 -0
  200. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/039-treeselect/345/210/206/347/261/273/351/200/211/346/213/251.md +631 -0
  201. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/040-uploader/346/226/207/344/273/266/344/270/212/344/274/240.md +531 -0
  202. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/041-verifycode/351/252/214/350/257/201/347/240/201.md +111 -0
  203. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/042-minirefresh/344/270/213/346/213/211/345/210/267/346/226/260.md +337 -0
  204. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/043-layout/345/270/203/345/261/200.md +150 -0
  205. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/044-image/345/233/276/347/211/207.md +144 -0
  206. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/045-toast/350/275/273/346/217/220/347/244/272.md +429 -0
  207. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/046-calendar/346/227/245/345/216/206.md +467 -0
  208. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/047-area/347/234/201/345/270/202/345/214/272/351/200/211/346/213/251.md +295 -0
  209. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/048-tab/346/240/207/347/255/276/351/241/265.md +577 -0
  210. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/049-dialog/345/274/271/345/207/272/346/241/206.md +491 -0
  211. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/050-dropdownmenu/344/270/213/346/213/211/350/217/234/345/215/225.md +265 -0
  212. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/051-notify/346/266/210/346/201/257/351/200/232/347/237/245.md +203 -0
  213. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/052-overlay/351/201/256/347/275/251/345/261/202.md +139 -0
  214. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/053-collapse/346/212/230/345/217/240/351/235/242/346/235/277.md +199 -0
  215. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/054-grid/345/256/253/346/240/274.md +183 -0
  216. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/055-countdown/345/200/222/350/256/241/346/227/266.md +289 -0
  217. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/056-divider/345/210/206/345/211/262/347/272/277.md +97 -0
  218. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/057-empty/347/251/272/347/212/266/346/200/201.md +146 -0
  219. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/058-imagepreview/345/233/276/347/211/207/351/242/204/350/247/210.md +292 -0
  220. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/059-lazyload/346/207/222/345/212/240/350/275/275.md +120 -0
  221. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/060-skeleton/351/252/250/346/236/266/345/261/217.md +114 -0
  222. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/061-steps/346/255/245/351/252/244/346/235/241.md +119 -0
  223. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/062-sticky/347/262/230/346/200/247/345/270/203/345/261/200.md +208 -0
  224. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/063-indexbar/347/264/242/345/274/225/346/240/217.md +161 -0
  225. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/064-sidebar/344/276/247/350/276/271/345/257/274/350/210/252.md +248 -0
  226. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/065-tabbar/346/240/207/347/255/276/346/240/217.md +314 -0
  227. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/066-badge/345/276/275/346/240/207.md +162 -0
  228. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/067-popover/346/260/224/346/263/241/345/274/271/345/207/272/346/241/206.md +325 -0
  229. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/068-cascader/347/272/247/350/201/224/351/200/211/346/213/251.md +360 -0
  230. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/069-selectperson/351/200/211/344/272/272/347/273/204/344/273/266.md +595 -0
  231. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/070-swipe/350/275/256/346/222/255.md +262 -0
  232. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/071-/345/233/275/351/231/205/345/214/226.md +51 -0
  233. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/072-easycalendar/346/227/245/345/216/206.md +132 -0
  234. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/073-qrcode/344/272/214/347/273/264/347/240/201.md +1538 -0
  235. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/074-imagescale/345/233/276/347/211/207/350/243/201/345/211/252.md +261 -0
  236. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/075-dragsort/346/213/226/346/213/275/346/216/222/345/272/217.md +161 -0
  237. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/076-chart/345/233/276/350/241/250.md +381 -0
  238. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/077-rtc/351/237/263/350/247/206/351/242/221.md +531 -0
  239. package/docs/m8mpdoc-develop/009-UI/347/273/204/344/273/266/078-table/350/241/250/346/240/274.md +849 -0
  240. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/001-/345/260/217/347/250/213/345/272/217/345/256/277/344/270/273/347/216/257/345/242/203.md +196 -0
  241. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/002-/350/256/276/350/256/241.md +0 -0
  242. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/003-/345/274/200/345/217/221/345/260/217/347/250/213/345/272/217.md +267 -0
  243. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/004-/345/260/217/347/250/213/345/272/217/351/205/215/347/275/256.md +71 -0
  244. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/005-/345/274/200/345/217/221/345/260/217/347/250/213/345/272/217/345/215/241/347/211/207.md +307 -0
  245. package/docs/m8mpdoc-develop/010-/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/006-/345/274/200/345/217/221/345/206/205/347/275/256/345/260/217/347/250/213/345/272/217.md +222 -0
  246. package/docs/m8mpdoc-develop/011-vuex/344/270/216router/347/232/204/344/275/277/347/224/250/router/347/232/204/344/275/277/347/224/250.md +275 -0
  247. package/docs/m8mpdoc-develop/011-vuex/344/270/216router/347/232/204/344/275/277/347/224/250/vuex/347/232/204/344/275/277/347/224/250.md +60 -0
  248. package/docs/m8mpdoc-develop/012-Mock/347/232/204/344/275/277/347/224/250/Mock/347/232/204/344/275/277/347/224/250.md +116 -0
  249. package/docs/m8mpdoc-develop/013-/350/247/243/345/206/263/346/234/254/345/234/260/350/267/250/345/237/237/devServer/350/267/250/345/237/237/351/205/215/347/275/256.md +81 -0
  250. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/DOM/346/223/215/344/275/234/346/227/266/346/234/272.md +45 -0
  251. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/M8.3/351/241/271/347/233/256/350/277/201/347/247/273/350/207/263M8.4.md +216 -0
  252. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/M8/350/200/201/351/241/271/347/233/256/350/277/201/347/247/273/350/267/250/347/253/257.md +55 -0
  253. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/install.md +91 -0
  254. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/pageopen.md +52 -0
  255. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/postcss/350/256/276/347/275/256.md +24 -0
  256. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/spechara.md +39 -0
  257. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/token/350/256/276/347/275/256.md +14 -0
  258. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/transpile_dependencies.md +18 -0
  259. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230/webview/344/270/255/345/206/205/345/265/214H5/351/241/265/351/235/242.md +186 -0
  260. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//344/270/211/346/226/271APP/346/240/207/351/242/230/344/270/215/350/207/252/345/212/250/344/277/256/346/224/271.md +30 -0
  261. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//344/270/252/346/200/247/345/214/226/346/241/206/346/236/266/347/273/204/344/273/266.md +87 -0
  262. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//344/274/240/345/200/274/345/212/250/346/200/201/346/240/267/345/274/217.md +29 -0
  263. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//344/277/256/346/224/271/347/273/204/344/273/266/345/206/205/346/240/267/345/274/217.md +29 -0
  264. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//345/244/204/347/220/206/346/226/260/347/202/271/345/260/217/347/250/213/345/272/217/350/267/250/345/237/237/351/227/256/351/242/230.md +22 -0
  265. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//346/243/200/346/265/213/345/217/230/345/214/226/347/232/204/346/263/250/346/204/217/344/272/213/351/241/271.md +183 -0
  266. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//347/234/237/346/234/272/350/260/203/350/257/225.md +26 -0
  267. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//350/267/250/347/253/257/345/274/200/345/217/221/345/270/270/350/247/201/351/227/256/351/242/230.md +126 -0
  268. package/docs/m8mpdoc-develop/014-/345/270/270/350/247/201/351/227/256/351/242/230//350/267/250/347/253/257/346/241/206/346/236/266/345/256/211/345/205/250/345/237/237/351/200/202/351/205/215.md +153 -0
  269. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/3thbuild.md +42 -0
  270. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/Pinia/347/232/204/344/275/277/347/224/250.md +88 -0
  271. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/custom_compts.md +60 -0
  272. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/customize.md +283 -0
  273. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/customtoken.md +74 -0
  274. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/i18n.md +220 -0
  275. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/modules.md +44 -0
  276. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/multiple.md +160 -0
  277. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/neui/345/272/224/347/224/250/346/236/204/345/273/272.md +111 -0
  278. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/pages.md +18 -0
  279. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/scss/345/217/230/351/207/217.md +132 -0
  280. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/subpage.md +107 -0
  281. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/weex/345/272/224/347/224/250/346/236/204/345/273/272.md +106 -0
  282. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226/xmapp.md +77 -0
  283. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226//344/270/216/345/216/237/347/224/237/351/241/271/347/233/256/350/236/215/345/220/210.md +61 -0
  284. package/docs/m8mpdoc-develop/015-/345/267/245/347/250/213/345/214/226//351/200/202/350/200/201/345/214/226/346/226/271/346/241/210.md +74 -0
  285. package/docs/m8mpdoc-develop/016-/350/247/206/350/247/211/350/247/204/350/214/203//347/247/273/345/212/250/350/247/206/350/247/211/350/256/276/350/256/241/350/247/204/350/214/2032.0.md +1 -0
  286. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/001-view.md +56 -0
  287. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/002-scroll-view.md +233 -0
  288. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/003-match-media.md +43 -0
  289. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/004-movable-view.md +118 -0
  290. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/005-cover-view.md +20 -0
  291. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/006-cover-image.md +154 -0
  292. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/007-audio.md +81 -0
  293. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/008-camera.md +70 -0
  294. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/009-image.md +197 -0
  295. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/010-video.md +196 -0
  296. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/011-live-player.md +139 -0
  297. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/012-live-pusher.md +274 -0
  298. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/013-canvas.md +90 -0
  299. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/014-web-view.md +151 -0
  300. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/015-vue/347/273/204/344/273/266.md +308 -0
  301. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/018-map.md +278 -0
  302. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/019-input.md +202 -0
  303. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/020-textarea.md +119 -0
  304. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/021-movable-area.md +25 -0
  305. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/022-page-meta.md +80 -0
  306. package/docs/m8mpdoc-develop/017-/345/206/205/347/275/256/347/273/204/344/273/266/023-navigation-bar.md +58 -0
  307. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/0-/344/273/213/347/273/215.md +92 -0
  308. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/000-/351/200/232/347/224/250/346/240/267/345/274/217.md +9 -0
  309. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/001-button/346/214/211/351/222/256.md +497 -0
  310. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/002-buttonedit/346/214/211/351/222/256/347/274/226/350/276/221.md +146 -0
  311. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/003-radio/345/215/225/351/200/211/346/241/206.md +476 -0
  312. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/004-checkbox/345/244/232/351/200/211/347/273/204.md +622 -0
  313. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/005-collapse/346/212/230/345/217/240/351/235/242/346/235/277.md +257 -0
  314. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/006-slider/346/273/221/345/235/227.md +420 -0
  315. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/007-badge/350/247/222/346/240/207.md +175 -0
  316. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/008-icon/345/233/276/346/240/207.md +133 -0
  317. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/009-overlay/351/201/256/347/275/251/345/261/202.md +111 -0
  318. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/010-drawer/346/212/275/345/261/211.md +369 -0
  319. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/011-dialog/345/274/271/345/207/272/345/261/202.md +430 -0
  320. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/015-steps/346/255/245/351/252/244/346/235/241.md +250 -0
  321. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/017-tooltip/346/226/207/345/255/227/346/217/220/347/244/272.md +101 -0
  322. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/018-progress/350/277/233/345/272/246/346/235/241.md +252 -0
  323. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/019-layout/345/270/203/345/261/200.md +324 -0
  324. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/023-toolbar/345/267/245/345/205/267/346/240/217.md +612 -0
  325. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/024-toolbarbtns/346/214/211/351/222/256/347/273/204.md +228 -0
  326. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/025-input/350/276/223/345/205/245/346/241/206.md +383 -0
  327. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/026-autocomplete/350/207/252/345/212/250/350/241/245/345/205/250/350/276/223/345/205/245/346/241/206.md +305 -0
  328. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/027-form/350/241/250/345/215/225.md +1343 -0
  329. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/028-cascader/347/272/247/350/201/224.md +695 -0
  330. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/029-image/345/233/276/347/211/207.md +211 -0
  331. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/031-datagrid/345/210/227/350/241/250.md +664 -0
  332. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/032-pagination/345/210/206/351/241/265.md +192 -0
  333. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/033-configprovider/345/205/250/345/261/200/351/205/215/347/275/256.md +417 -0
  334. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/034-switch/345/274/200/345/205/263.md +305 -0
  335. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/035-breadcrumb/351/235/242/345/214/205/345/261/221.md +90 -0
  336. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/036-empty/347/251/272/347/212/266/346/200/201.md +80 -0
  337. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/037-colorpalette/350/260/203/350/211/262/346/235/277.md +201 -0
  338. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/038-alert/346/217/220/347/244/272.md +206 -0
  339. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/039-scrollbar/346/273/232/345/212/250/346/235/241.md +256 -0
  340. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/040-skeleton/351/252/250/346/236/266/345/261/217.md +284 -0
  341. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/041-loading/345/212/240/350/275/275.md +183 -0
  342. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/042-verifycode/351/252/214/350/257/201/347/240/201.md +128 -0
  343. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/043-timeline/346/227/266/351/227/264/350/275/264.md +196 -0
  344. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/044-workflow/345/267/245/344/275/234/346/265/201.md +452 -0
  345. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/045-ewebeditor/345/257/214/346/226/207/346/234/254/347/274/226/350/276/221/345/231/250.md +236 -0
  346. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/046-tabs/346/240/207/347/255/276/351/241/265.md +388 -0
  347. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/047-notification/351/200/232/347/237/245.md +321 -0
  348. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/048-dropdown/344/270/213/346/213/211/350/217/234/345/215/225.md +400 -0
  349. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/049-tree/346/240/221/345/275/242/346/216/247/344/273/266.md +1567 -0
  350. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/050-popover/345/274/271/345/207/272/346/241/206.md +294 -0
  351. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/051-select/351/200/211/346/213/251/345/231/250.md +976 -0
  352. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/052-tree-select/346/240/221/345/275/242/351/200/211/346/213/251.md +918 -0
  353. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/053-inputnumber/346/225/260/345/255/227/350/276/223/345/205/245/346/241/206.md +206 -0
  354. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/054-tag/346/240/207/347/255/276.md +348 -0
  355. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/055-upload/344/270/212/344/274/240.md +718 -0
  356. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/056-message/346/266/210/346/201/257/346/217/220/347/244/272.md +287 -0
  357. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/057-segmented/345/210/206/346/256/265/346/216/247/345/210/266/345/231/250.md +222 -0
  358. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/058-progress/350/277/233/345/272/246/346/235/241.md +420 -0
  359. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/059-result/347/273/223/346/236/234.md +106 -0
  360. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/060-avatar/345/244/264/345/203/217.md +294 -0
  361. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/061-affix/345/233/272/351/222/211.md +120 -0
  362. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/062-popconfirm/346/260/224/346/263/241/347/241/256/350/256/244/346/241/206.md +139 -0
  363. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/063-input-tag/346/240/207/347/255/276/350/276/223/345/205/245/346/241/206.md +244 -0
  364. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/063-messagebox/346/266/210/346/201/257/345/274/271/346/241/206.md +527 -0
  365. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/064-rate/350/257/204/345/210/206.md +223 -0
  366. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/065-table/350/241/250/346/240/274.md +1417 -0
  367. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/066-link/351/223/276/346/216/245.md +177 -0
  368. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/067-file-upload/346/226/207/344/273/266/344/270/212/344/274/240.md +389 -0
  369. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/068-text/346/226/207/346/234/254.md +202 -0
  370. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/069-backtop/345/233/236/345/210/260/351/241/266/351/203/250.md +165 -0
  371. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/070-image-upload/345/233/276/347/211/207/344/270/212/344/274/240.md +388 -0
  372. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/071-file-list/346/226/207/344/273/266/345/210/227/350/241/250.md +94 -0
  373. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/072-sublist/345/255/220/350/241/250.md +729 -0
  374. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/073-carousel/350/265/260/351/251/254/347/201/257.md +306 -0
  375. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/075-date-picker/346/227/245/346/234/237/351/200/211/346/213/251.md +580 -0
  376. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/076-colorPicker/351/242/234/350/211/262/351/200/211/346/213/251/345/231/250.md +183 -0
  377. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/077-mention/346/217/220/345/217/212.md +390 -0
  378. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/079-timeselect/346/227/266/351/227/264/351/200/211/346/213/251/345/231/250.md +170 -0
  379. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/080-card/345/215/241/347/211/207.md +198 -0
  380. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/082-datetimepicker/346/227/266/351/227/264/351/200/211/346/213/251.md +392 -0
  381. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/085-timepicker/346/227/266/351/227/264/351/200/211/346/213/251/345/231/250.md +163 -0
  382. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/086-calendar/346/227/245/345/216/206.md +141 -0
  383. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/087-divider/345/210/206/345/211/262/347/272/277.md +77 -0
  384. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/090-upload-service/346/226/207/344/273/266/344/270/212/344/274/240.md +61 -0
  385. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/091-image-upload-service/345/233/276/347/211/207/344/270/212/344/274/240.md +49 -0
  386. package/docs/m8mpdoc-develop/018-EPUI/347/273/204/344/273/266/092-space/351/227/264/350/267/235.md +305 -0
  387. package/docs/m8mpdoc-develop/home-/351/246/226/351/241/265.md +612 -0
  388. package/docs/m8mpdoc-develop/home1-propose.md +45 -0
  389. package/package.json +54 -0
@@ -0,0 +1,1343 @@
1
+ # Form 表单
2
+
3
+ 表单包括 `输入框`、`单选框`、`下拉框`、`复选框` 等等。使用表单,您可以收集、验证和提交数据。
4
+
5
+ ## 基础表单
6
+
7
+ 它包括各种输入项,如 `输入框`、`下拉框`、`单选框` 和 `复选框`。
8
+
9
+ 在每个 `表单` 组件中,您需要使用 `表单项` 来容纳您的输入项。
10
+
11
+ ```html
12
+ <template>
13
+ <e-form-m :model="form" label-width="120px">
14
+ <e-form-item-m label="活动名称">
15
+ <e-input-m v-model="form.name" />
16
+ </e-form-item-m>
17
+ <e-form-item-m label="活动形式">
18
+ <e-input-m v-model="form.desc" type="textarea" />
19
+ </e-form-item-m>
20
+ <e-form-item-m>
21
+ <e-button-m type="primary" @click="onSubmit(form)">创建</e-button-m>
22
+ <e-button-m>取消</e-button-m>
23
+ </e-form-item-m>
24
+ </e-form-m>
25
+ </template>
26
+
27
+ <script lang="ts" setup>
28
+ import { reactive } from 'vue';
29
+
30
+ // do not use same name with ref
31
+ const form = reactive({
32
+ name: '',
33
+ desc: ''
34
+ });
35
+
36
+ const onSubmit = (form) => {
37
+ console.log(form, 'form');
38
+ };
39
+ </script>
40
+ ```
41
+
42
+ ## 验证
43
+
44
+ 表单组件允许您验证数据,帮助您查找和纠正错误。
45
+
46
+ 只需为 表单 组件添加 `rules` 属性,传递验证规则,并为 表单项 设置 `prop` 属性作为需要验证的特定键。
47
+
48
+ ```html
49
+ <template>
50
+ <e-form-m ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="220px">
51
+ <e-form-item-m label="活动名称" prop="name">
52
+ <e-input-m v-model="ruleForm.name" />
53
+ </e-form-item-m>
54
+ <e-form-item-m label="活动区域" prop="region">
55
+ <e-select-m v-model="ruleForm.region" placeholder="选择活动区域">
56
+ <e-option-m label="区域一" value="shanghai" />
57
+ <e-option-m label="区域二" value="beijing" />
58
+ </e-select-m>
59
+ </e-form-item-m>
60
+ <e-form-item-m label="活动时间" required>
61
+ <!-- 当 ep-form-item 嵌套在另一个 ep-form-item 中时,其标签宽度将为 0。如果需要,您可以在该 ep-form-item 上设置 label-width -->
62
+ <em-row>
63
+ <em-col :span="11">
64
+ <e-form-item-m prop="date1">
65
+ <e-date-picker-m
66
+ v-model="ruleForm.date1"
67
+ type="date"
68
+ label="选择日期"
69
+ placeholder="选择日期"
70
+ style="width: 100%"
71
+ />
72
+ </e-form-item-m>
73
+ </em-col>
74
+ <em-col class="text-center" :span="2">
75
+ <span class="text-gray-500">-</span>
76
+ </em-col>
77
+ <em-col :span="11">
78
+ <e-form-item-m prop="date2">
79
+ <e-date-picker-m
80
+ v-model="ruleForm.date2"
81
+ type="date"
82
+ label="选择日期"
83
+ placeholder="选择日期"
84
+ style="width: 100%"
85
+ />
86
+ </e-form-item-m>
87
+ </em-col>
88
+ </em-row>
89
+ </e-form-item-m>
90
+ <e-form-item-m label="即时交付" prop="delivery">
91
+ <e-switch-m v-model="ruleForm.delivery" />
92
+ </e-form-item-m>
93
+ <e-form-item-m label="活动类型" prop="type">
94
+ <e-checkbox-group-m v-model="ruleForm.type">
95
+ <e-checkbox-m value="线上活动" label="线上活动" name="1" />
96
+ <e-checkbox-m value="促销活动" label="促销活动" name="2" />
97
+ <e-checkbox-m value="线下活动" label="线下活动" name="3" />
98
+ <e-checkbox-m value="简单品牌曝光" label="简单品牌曝光" name="4" />
99
+ </e-checkbox-group-m>
100
+ </e-form-item-m>
101
+ <e-form-item-m label="资源" prop="resource">
102
+ <e-radio-group-m v-model="ruleForm.resource">
103
+ <e-radio-m value="赞助商" label="赞助商" />
104
+ <e-radio-m value="场馆" label="场馆" />
105
+ </e-radio-group-m>
106
+ </e-form-item-m>
107
+ <e-form-item-m label="活动形式" prop="desc">
108
+ <e-input-m v-model="ruleForm.desc" type="textarea" />
109
+ </e-form-item-m>
110
+ <e-form-item-m label="主办人身份证号码" prop="idCard">
111
+ <e-input-m v-model="ruleForm.idCard" />
112
+ </e-form-item-m>
113
+ <e-form-item-m label="主办人手机号码" prop="phone">
114
+ <e-input-m v-model="ruleForm.phone" />
115
+ </e-form-item-m>
116
+ <e-form-item-m label="地址" prop="address">
117
+ <e-input-m v-model="ruleForm.address" />
118
+ </e-form-item-m>
119
+ <e-form-item-m label="社会信用代码" prop="creditCode">
120
+ <e-input-m v-model="ruleForm.creditCode" />
121
+ </e-form-item-m>
122
+ <e-form-item-m label="邮编" prop="postCode">
123
+ <e-input-m v-model="ruleForm.postCode" />
124
+ </e-form-item-m>
125
+ <e-form-item-m label="爱好" prop="hobby">
126
+ <e-input-m v-model="ruleForm.hobby" />
127
+ </e-form-item-m>
128
+ <e-form-item-m>
129
+ <e-button-m type="primary" @click="submitForm(ruleFormRef)">创建</e-button-m>
130
+ <e-button-m type="primary" @click="quicklyValidate(ruleFormRef)">快速验证</e-button-m>
131
+ <e-button-m @click="resetForm(ruleFormRef)">重置</e-button-m>
132
+ </e-form-item-m>
133
+ </e-form-m>
134
+ </template>
135
+
136
+ <script lang="ts" setup>
137
+ import { reactive, ref } from 'vue';
138
+ import { type FormRules, type FormInstance } from '@epoint-mfe/eui-components';
139
+
140
+ const ruleFormRef = ref<FormInstance>(); // 表单引用
141
+ const ruleForm = reactive({
142
+ name: 'Hello', // 活动名称
143
+ date1: '', // 活动日期
144
+ date2: '', // 活动时间
145
+ delivery: false, // 即时交付
146
+ type: [], // 活动类型
147
+ resource: '', // 资源
148
+ desc: '', // 活动形式
149
+ idCard: '', // 主办人身份证号码
150
+ phone: '', // 主办人身份证号码
151
+ address: '',
152
+ creditCode: '',
153
+ postCode: '',
154
+ hobby: ''
155
+ });
156
+ const rules = reactive<FormRules>({
157
+ name: [
158
+ {
159
+ validator: (v, opt) => {
160
+ console.log(v, opt);
161
+ if (v.length >= 3 && v.length <= 5) {
162
+ return true;
163
+ }
164
+ return new Error('长度应为3至5个字符');
165
+ },
166
+ required: false,
167
+ trigger: 'blur'
168
+ }
169
+ ],
170
+ date1: [{ required: true, type: 'date', message: '请选择日期', trigger: 'change' }],
171
+ date2: [{ required: true, type: 'date', message: '请选择时间', trigger: 'change' }],
172
+ type: [
173
+ {
174
+ required: true,
175
+ message: '请至少选择一个活动类型',
176
+ trigger: 'change'
177
+ }
178
+ ],
179
+ resource: [
180
+ {
181
+ required: true,
182
+ message: '请选择活动资源',
183
+ trigger: 'change'
184
+ }
185
+ ],
186
+ desc: [{ required: true, message: '请输入活动形式', trigger: 'blur' }],
187
+ idCard: [{ type: 'idCard', required: true, message: '必须是身份证格式', trigger: 'blur' }],
188
+ phone: [{ required: true }, { type: 'phone' }],
189
+ address: [{ type: 'string', required: true, min: 10, trigger: 'blur' }],
190
+ creditCode: [{ type: 'creditCode', required: true, min: 10, trigger: 'blur' }],
191
+ postCode: [{ type: 'postCode', required: true, min: 10, trigger: 'blur' }],
192
+ hobby: [{ type: 'enum', enums: ['读书', '音乐', '写代码'], trigger: 'blur' }]
193
+ });
194
+ const submitForm = async (formEl: FormInstance | undefined) => {
195
+ if (!formEl) return;
196
+ await formEl.validate((valid, fields) => {
197
+ if (valid) {
198
+ console.log('提交成功!');
199
+ } else {
200
+ console.log('提交失败!', fields);
201
+ }
202
+ });
203
+ };
204
+ const quicklyValidate = async (formEl: FormInstance | undefined) => {
205
+ if (!formEl) return;
206
+ await formEl.fastValidate((valid, fields) => {
207
+ if (valid) {
208
+ console.log('验证成功!');
209
+ } else {
210
+ console.log('验证失败!', fields);
211
+ }
212
+ });
213
+ };
214
+ const resetForm = (formEl: FormInstance | undefined) => {
215
+ if (!formEl) return;
216
+ formEl.resetFields();
217
+ };
218
+ </script>
219
+ ```
220
+
221
+ #### 注意
222
+
223
+ 1. 控件的 model 必须和表单的 model 一致。表单验证是基于表单的 model 进行的,所以表单项的 model 必须和表单的 model 一致。也就是说,下面这样的代码是不合法的:
224
+
225
+ ```html
226
+ <e-form-m v-model="formDataA">
227
+ <e-form-item-m
228
+ label="name"
229
+ prop="name"
230
+ :rules="[{ required: true, message: '请输入姓名' }, { type: 'string', min: 2, max: 5, message: '长度必须在 2 到 5 个字符之间' }]"
231
+ >
232
+ <e-input-m v-model="formDataB.name" />
233
+ </e-form-item-m>
234
+ </e-form-m>
235
+ <e-form-m v-model="formDataB">
236
+ <!-- 代码省略 -->
237
+ </e-form-m>
238
+ ```
239
+
240
+ 2. 必填规则比较常用,因此我们提供了简写的形式,即在内置规则上都可以额外加上 `required` 属性来表示必填,如: `{type: 'idCard', required: true, message: '请输入身份证号码'}` 。但是这种情况下,必填验证和内置的格式验证将会使用统一的验证错误信息提示。如果你需要针对必填和格式验证使用不同的错误信息提示,则不能使用这种简写的形式, 需要将其拆分为单独的验证规则,可参考下面的代码示例或上方的示例中的 phone 验证规则。
241
+
242
+ ```js
243
+ [
244
+ { type: 'required', message: '请输入身份证号码' }, // 等价 { required: true, message: '请输入身份证号码' },
245
+ { type: 'idCard', message: '请输入正确的身份证号码' }
246
+ ];
247
+ ```
248
+
249
+ ## 自定义验证规则
250
+
251
+ 此示例演示如何自定义自己的验证规则以完成双因素密码验证。
252
+
253
+ 这里我们使用 `status-icon` 来反映验证结果,显示为图标。
254
+
255
+ 你可以在验证规则上通过 `validator` 来自定义验证函数。 函数必须具有显式返回值,返回值可以是 `boolean` `Error` `Promise<boolean>` `Promise<Error>` 之一。
256
+
257
+ 异步验证验证返回 `Promise` 的情况下,请始终使用 `resolve` 返回结果,包括验证失败的情况。
258
+
259
+ ```html
260
+ <template>
261
+ <e-form-m ref="ruleFormRef2" :model="ruleForm2" status-icon :rules="rules2" label-width="120px">
262
+ <e-form-item-m label="密码" prop="pass">
263
+ <e-input-m v-model="ruleForm2.pass" type="password" autocomplete="off" show-password />
264
+ </e-form-item-m>
265
+ <e-form-item-m label="再次输入密码" prop="checkPass">
266
+ <e-input-m v-model="ruleForm2.checkPass" type="password" autocomplete="off" show-password />
267
+ </e-form-item-m>
268
+ <e-form-item-m label="年龄" prop="age">
269
+ <e-input-m v-model.number="ruleForm2.age" />
270
+ </e-form-item-m>
271
+ <e-form-item-m>
272
+ <e-button-m type="primary" @click="submitForm(ruleFormRef2)">Submit</e-button-m>
273
+ <e-button-m @click="resetForm(ruleFormRef2)">Reset</e-button-m>
274
+ </e-form-item-m>
275
+ </e-form-m>
276
+ </template>
277
+
278
+ <script lang="ts" setup>
279
+ import { reactive, ref } from 'vue';
280
+ import { type FormRules, type FormInstance } from '@epoint-mfe/eui-components';
281
+
282
+ const ruleFormRef2 = ref<FormInstance>();
283
+ const ruleForm2 = reactive({
284
+ pass: '',
285
+ checkPass: '',
286
+ age: ''
287
+ });
288
+ const checkAge = (value: any, rule: any) => {
289
+ if (!value) {
290
+ return new Error('请输入年龄');
291
+ }
292
+ return new Promise((resolve) => {
293
+ setTimeout(() => {
294
+ if (!Number.isInteger(value)) {
295
+ resolve(new Error('年龄只能是数字'));
296
+ } else {
297
+ if (value < 18) {
298
+ resolve(new Error('年龄必须大于18'));
299
+ } else {
300
+ resolve(true);
301
+ }
302
+ }
303
+ }, 1000);
304
+ });
305
+ };
306
+ const validatePwd = (
307
+ pwd: string,
308
+ options: {
309
+ minLength: number;
310
+ requireCombo: number;
311
+ hasNumber: boolean;
312
+ hasLowerCase: boolean;
313
+ hasUpperCase: boolean;
314
+ hasSymbol: boolean;
315
+ }
316
+ ) => {
317
+ const { minLength, requireCombo, hasNumber, hasLowerCase, hasUpperCase, hasSymbol } = options;
318
+ if (pwd.length < minLength) return false;
319
+
320
+ let criteriaMet = 0;
321
+ if (hasNumber && /\d/.test(pwd)) criteriaMet++;
322
+ if (hasLowerCase && /[a-z]/.test(pwd)) criteriaMet++;
323
+ if (hasUpperCase && /[A-Z]/.test(pwd)) criteriaMet++;
324
+ if (hasSymbol && /[^a-zA-Z0-9]/.test(pwd)) criteriaMet++;
325
+
326
+ return criteriaMet >= requireCombo;
327
+ };
328
+ function defaultPwdRule(pwd: string) {
329
+ const ok = validatePwd(pwd, {
330
+ minLength: 8,
331
+ requireCombo: 3,
332
+ hasNumber: true,
333
+ hasLowerCase: true,
334
+ hasUpperCase: true,
335
+ hasSymbol: true
336
+ });
337
+ return {
338
+ isValid: ok,
339
+ message: ok ? '' : '密码最短需要8个字符, 至少包含 (大写字母, 小写字母, 数字, 符号) 中的3种'
340
+ };
341
+ }
342
+ const validatePass = (value: any, rule: any) => {
343
+ if (value === '') {
344
+ return new Error('请输入密码');
345
+ } else {
346
+ const { isValid, message } = defaultPwdRule(value);
347
+ return isValid ? true : new Error(message);
348
+ }
349
+ };
350
+ const validatePass2 = (value: any, rule: any, callback: any) => {
351
+ if (value === '') {
352
+ return new Error('请再次输入密码进行确认');
353
+ } else if (value !== ruleForm2.pass) {
354
+ return new Error('两次的密码不一致');
355
+ } else {
356
+ return true;
357
+ }
358
+ };
359
+ const rules2 = reactive<FormRules>({
360
+ pass: [{ validator: validatePass, trigger: 'blur' }],
361
+ checkPass: [{ validator: validatePass2, trigger: 'blur' }],
362
+ age: [{ validator: checkAge, trigger: 'blur' }]
363
+ });
364
+ const submitForm = async (formEl: FormInstance | undefined) => {
365
+ if (!formEl) return;
366
+ await formEl.validate((valid, fields) => {
367
+ if (valid) {
368
+ console.log('提交成功!');
369
+ } else {
370
+ console.log('提交失败!', fields);
371
+ }
372
+ });
373
+ };
374
+ const resetForm = (formEl: FormInstance | undefined) => {
375
+ if (!formEl) return;
376
+ formEl.resetFields();
377
+ };
378
+ </script>
379
+ ```
380
+
381
+ ## 添加/删除表单项
382
+
383
+ 除了一次性在表单组件上传递所有验证规则,还可以在单个表单字段上动态传递验证规则或删除规则。
384
+
385
+ ```html
386
+ <template>
387
+ <e-form-m ref="formRef" :model="dynamicValidateForm" label-width="120px">
388
+ <e-form-item-m
389
+ prop="email"
390
+ label="电子邮件"
391
+ :rules="[
392
+ {
393
+ required: true,
394
+ message: '请输入电子邮件地址',
395
+ trigger: 'blur'
396
+ },
397
+ {
398
+ type: 'email',
399
+ message: '请输入正确的电子邮件地址',
400
+ trigger: ['blur', 'change']
401
+ }
402
+ ]"
403
+ >
404
+ <e-input-m v-model="dynamicValidateForm.email" />
405
+ </e-form-item-m>
406
+ <e-form-item-m
407
+ v-for="(domain, index) in dynamicValidateForm.domains"
408
+ :key="domain.key"
409
+ :label="'域名' + (index + 1)"
410
+ :prop="'domains.' + index + '.value'"
411
+ :rules="{
412
+ required: true,
413
+ message: '域名不能为空',
414
+ trigger: 'blur'
415
+ }"
416
+ >
417
+ <e-input-m v-model="domain.value" />
418
+ <e-button-m class="mt-2" @click="removeDomain(domain)">删除</e-button-m>
419
+ </e-form-item-m>
420
+ <e-form-item-m>
421
+ <e-button-m type="primary" @click="submitForm(formRef)">提交</e-button-m>
422
+ <e-button-m @click="addDomain">新增域名</e-button-m>
423
+ <e-button-m @click="resetForm(formRef)">重置</e-button-m>
424
+ </e-form-item-m>
425
+ </e-form-m>
426
+ </template>
427
+
428
+ <script lang="ts" setup>
429
+ import { ref, reactive } from 'vue';
430
+ import { type FormInstance } from '@epoint-mfe/eui-components';
431
+
432
+ interface DomainItem {
433
+ key: number;
434
+ value: string;
435
+ }
436
+
437
+ const formRef = ref<FormInstance>();
438
+ const dynamicValidateForm = reactive<{
439
+ domains: DomainItem[];
440
+ email: string;
441
+ }>({
442
+ domains: [
443
+ {
444
+ key: 1,
445
+ value: ''
446
+ }
447
+ ],
448
+ email: ''
449
+ });
450
+ const removeDomain = (item: DomainItem) => {
451
+ const index = dynamicValidateForm.domains.indexOf(item);
452
+ if (index !== -1) {
453
+ dynamicValidateForm.domains.splice(index, 1);
454
+ }
455
+ };
456
+ const addDomain = () => {
457
+ dynamicValidateForm.domains.push({
458
+ key: Date.now(),
459
+ value: ''
460
+ });
461
+ };
462
+ const submitForm = async (formEl: FormInstance | undefined) => {
463
+ if (!formEl) return;
464
+ await formEl.validate((valid, fields) => {
465
+ if (valid) {
466
+ console.log('提交成功!');
467
+ } else {
468
+ console.log('提交失败!', fields);
469
+ }
470
+ });
471
+ };
472
+ const resetForm = (formEl: FormInstance | undefined) => {
473
+ if (!formEl) return;
474
+ formEl.resetFields();
475
+ };
476
+ </script>
477
+ ```
478
+
479
+ ## 数值验证
480
+
481
+ 数值验证需要在输入框的 `v-model` 绑定上添加 `.number` 修饰符,用于将字符串值转换为由 `Vue` 提供的数字。
482
+
483
+ ```html
484
+ <template>
485
+ <e-form-m ref="formRef1" :model="numberValidateForm" label-width="100px">
486
+ <e-form-item-m
487
+ label="年龄"
488
+ prop="age"
489
+ :rules="[
490
+ { required: true, message: '年龄是必填项' },
491
+ { type: 'number', message: '年龄必须是数字' }
492
+ ]"
493
+ >
494
+ <e-input-m v-model.number="numberValidateForm.age" type="text" autocomplete="off" />
495
+ </e-form-item-m>
496
+ <e-form-item-m>
497
+ <e-button-m type="primary" @click="submitForm(formRef1)">提交</e-button-m>
498
+ <e-button-m @click="resetForm(formRef1)">重置</e-button-m>
499
+ </e-form-item-m>
500
+ </e-form-m>
501
+ </template>
502
+
503
+ <script lang="ts" setup>
504
+ import { reactive, ref } from 'vue';
505
+ import type { FormInstance } from '@epoint-fe/eui-components';
506
+
507
+ const formRef1 = ref<FormInstance>();
508
+ const numberValidateForm = reactive({
509
+ age: ''
510
+ });
511
+
512
+ const submitForm = async (formEl: FormInstance | undefined) => {
513
+ if (!formEl) return;
514
+ await formEl.validate((valid, fields) => {
515
+ if (valid) {
516
+ console.log('提交成功!');
517
+ } else {
518
+ console.log('提交失败!', fields);
519
+ }
520
+ });
521
+ };
522
+ const resetForm = (formEl: FormInstance | undefined) => {
523
+ if (!formEl) return;
524
+ formEl.resetFields();
525
+ };
526
+ </script>
527
+ ```
528
+
529
+ ## 尺寸、对齐方式及风格控制
530
+
531
+ 表单中的所有组件都从该表单继承其 `size` 属性。同样,`FormItem` 也有一个 `size` 属性。尽管如此,如果您不希望组件从 `Form` 或 `FormItem` 继承其尺寸,仍然可以微调每个组件的 `size`。
532
+
533
+ 可通过 `label-position` 控制表单标签的对齐方式,可选值 `left`、`right`、`top`。
534
+
535
+ 当`label-position`与输入框横向对齐时,可通过 `value-position`控制输入框的对齐方式,可选值`left`、`right`。
536
+
537
+ 表单默认为圆角卡片风格,可通过 `round` 设为 `false` 切换为直角风格。
538
+
539
+ ```html
540
+ <template>
541
+ <div class="toolbar-box">
542
+ <e-radio-group-m v-model="size" label="尺寸控制">
543
+ <e-radio-button-m value="large">大尺寸</e-radio-button-m>
544
+ <e-radio-button-m value="default">默认尺寸</e-radio-button-m>
545
+ <e-radio-button-m value="small">小尺寸</e-radio-button-m>
546
+ </e-radio-group-m>
547
+ <e-radio-group-m v-model="labelPosition" label="标签位置控制">
548
+ <e-radio-button-m value="left">label左侧</e-radio-button-m>
549
+ <e-radio-button-m value="right">label右侧</e-radio-button-m>
550
+ <e-radio-button-m value="top">label顶部</e-radio-button-m>
551
+ </e-radio-group-m>
552
+ <e-radio-group-m v-if="labelPosition !== 'top'" v-model="valuePosition" label="输入框位置控制">
553
+ <e-radio-button-m value="left">value左侧</e-radio-button-m>
554
+ <e-radio-button-m value="right">value右侧</e-radio-button-m>
555
+ </e-radio-group-m>
556
+ <text class="mx-1">圆角卡片</text>
557
+ <e-switch-m v-model="round" />
558
+ </div>
559
+ <br />
560
+ <e-form-m
561
+ ref="form"
562
+ :model="sizeForm"
563
+ label-width="100px"
564
+ :round="round"
565
+ :label-position="labelPosition"
566
+ :value-position="valuePosition"
567
+ :size="size"
568
+ >
569
+ <e-form-item-m prop="name" label="活动名称" :rules="[{ required: true, message: '这是必填项' }]">
570
+ <e-input-m v-model="sizeForm.name" placeholder="请输入活动名称" />
571
+ </e-form-item-m>
572
+ <e-form-item-m label="活动形式">
573
+ <e-input-m v-model="sizeForm.desc" type="textarea" />
574
+ </e-form-item-m>
575
+ <e-form-item-m label="活动时间">
576
+ <em-col :span="11">
577
+ <e-date-picker-m
578
+ v-model="sizeForm.date1"
579
+ type="date"
580
+ label="选择日期"
581
+ placeholder="选择日期"
582
+ style="width: 100%"
583
+ />
584
+ </em-col>
585
+ <em-col class="text-center" :span="1" style="margin: 0 0.5rem">-</em-col>
586
+ <em-col :span="11">
587
+ <e-date-picker-m
588
+ v-model="sizeForm.date2"
589
+ type="date"
590
+ label="选择时间"
591
+ placeholder="选择时间"
592
+ style="width: 100%"
593
+ />
594
+ </em-col>
595
+ </e-form-item-m>
596
+ <e-form-item-m label="活动类型">
597
+ <e-checkbox-group-m v-model="sizeForm.type">
598
+ <e-checkbox-m value="线上活动" label="线上活动" name="type" />
599
+ <e-checkbox-m value="促销活动" label="促销活动" name="type" />
600
+ </e-checkbox-group-m>
601
+ </e-form-item-m>
602
+ <e-form-item-m label="即时交付" prop="delivery">
603
+ <e-switch-m v-model="sizeForm.delivery" />
604
+ </e-form-item-m>
605
+ <e-form-item-m label="资源">
606
+ <e-radio-group-m v-model="sizeForm.resource">
607
+ <e-radio-m value="赞助商" label="赞助商" />
608
+ <e-radio-m value="场馆" label="场馆" />
609
+ </e-radio-group-m>
610
+ </e-form-item-m>
611
+ <e-form-item-m>
612
+ <e-button-m type="primary" @click="onSubmit(sizeForm)">创建</e-button-m>
613
+ <e-button-m>取消</e-button-m>
614
+ </e-form-item-m>
615
+ </e-form-m>
616
+ </template>
617
+
618
+ <script lang="ts" setup>
619
+ import { reactive, ref } from 'vue';
620
+
621
+ const size = ref('default');
622
+ const labelPosition = ref('left');
623
+ const valuePosition = ref('left');
624
+ const round = ref<boolean>(true);
625
+ const sizeForm = reactive({
626
+ name: '',
627
+ desc: '',
628
+ date1: '',
629
+ date2: '',
630
+ delivery: false,
631
+ type: [],
632
+ resource: ''
633
+ });
634
+ const onSubmit = (form) => {
635
+ console.log(form, 'form');
636
+ };
637
+ </script>
638
+ ```
639
+
640
+ ## 帮助提示
641
+
642
+ `label-tooltip`​(label 区域的悬浮帮助提示)、​`tooltip`​(控件区域的悬浮帮助提示)用于设置表单项的帮助信息; `top`插槽用于在表单项上方添加始终可见的辅助说明文本;`extra`插槽用于在表单项下方添加始终可见的辅助说明文本。
643
+
644
+ ```html
645
+ <template>
646
+ <e-form-m :model="formTooltip" label-width="120px">
647
+ <e-form-item-m label="活动名称" label-tooltip="帮助提示:请输入活动名称">
648
+ <e-input-m v-model="formTooltip.name" placeholder="请输入活动名称" />
649
+ </e-form-item-m>
650
+ <e-form-item-m
651
+ label="活动时间"
652
+ :label-tooltip="{
653
+ content: '帮助提示:<span style=\'color:var(--e-color-danger)\'>请选择日期</span>',
654
+ rawContent: true
655
+ }"
656
+ >
657
+ <em-col :span="11">
658
+ <e-date-picker-m v-model="formTooltip.date1" type="date" placeholder="选择日期" style="width: 100%" />
659
+ </em-col>
660
+ <em-col :span="2" class="text-center">
661
+ <span class="text-gray-500">-</span>
662
+ </em-col>
663
+ <em-col :span="11">
664
+ <e-date-picker-m v-model="formTooltip.date2" type="date" placeholder="选择日期" style="width: 100%" />
665
+ </em-col>
666
+ </e-form-item-m>
667
+ <e-form-item-m label="活动类型" tooltip="帮助提示:请选择活动类型">
668
+ <e-checkbox-group-m v-model="formTooltip.type">
669
+ <e-checkbox-m value="线上活动" label="线上活动" name="type" />
670
+ <e-checkbox-m value="促销活动" label="促销活动" name="type" />
671
+ </e-checkbox-group-m>
672
+ </e-form-item-m>
673
+ <e-form-item-m label="活动说明">
674
+ <template #top>
675
+ <e-alert-m
676
+ title="提示信息"
677
+ type="primary"
678
+ show-icon
679
+ :closable="false"
680
+ style="margin-bottom: 12px; padding: 8px 12px"
681
+ />
682
+ </template>
683
+ <e-input-m v-model="formTooltip.desc" type="textarea" />
684
+ <template #extra>
685
+ <span>请填写活动的详细说明,不少于10个字符</span>
686
+ </template>
687
+ </e-form-item-m>
688
+ <e-form-item-m>
689
+ <e-button-m type="primary" @click="onSubmit(formTooltip)">创建</e-button-m>
690
+ <e-button-m>取消</e-button-m>
691
+ </e-form-item-m>
692
+ </e-form-m>
693
+ </template>
694
+ <script lang="ts" setup>
695
+ import { reactive } from 'vue';
696
+
697
+ const formTooltip = reactive({
698
+ name: '',
699
+ date1: '',
700
+ date2: '',
701
+ type: [],
702
+ desc: ''
703
+ });
704
+ const onSubmit = (form) => {
705
+ console.log(form, 'form');
706
+ };
707
+ </script>
708
+ ```
709
+
710
+ ## 数据脱敏的表单提交
711
+
712
+ 由于数据脱敏的特殊性,首次进入编辑时,需要全部重新录入。未保存前,用户在页面的编辑需要脱敏展示的同时需要保留真实值,表单提交时需要对脱敏数据进行处理,也就是脱敏的内容知道当前是否保存过,提供以下两种处理方式:
713
+
714
+ 1. 自己提交数据,手动更新表单状态。
715
+
716
+ 2. 将提交数据的逻辑放在表单内部,表单内进行提交请求的发起,内部会自动处理状态逻辑。
717
+
718
+ ### 外部手动提交
719
+
720
+ 在表单外进行数据提交时,调用 `getCleanData` 获取未设置脱敏、脱敏已修改、未设置只读的数据,在提交成功后需调用 `resetEditStatus` 重置脱敏项的修改状态。
721
+
722
+ ```html
723
+ <template>
724
+ <e-form-m ref="formRef2" :model="formData" :rules="formRules">
725
+ <e-form-item-m prop="testtext" label="测试" label-width="120px" :divider="false">
726
+ <e-input-m v-model="formData.testtext" placeholder="请输入" :desensitization-type="''" />
727
+ </e-form-item-m>
728
+ <e-divider-m content-position="right">以下为敏感数据,已脱敏</e-divider-m>
729
+ <e-form-item-m prop="name" label="姓名" label-width="120px">
730
+ <e-input-m v-model="formData.name" placeholder="请输入" :desensitization-type="DESENDATATYPE_CHINESE_NAME" />
731
+ </e-form-item-m>
732
+ <e-form-item-m prop="address" label="地址(只读)" label-width="120px" :divider="false">
733
+ <e-input-m v-model="formData.address" placeholder="请输入" readonly />
734
+ </e-form-item-m>
735
+ <em-row>
736
+ <em-col :span="4" style="margin-left: 131px">
737
+ <e-button-m type="primary" @click="submit">提交</e-button-m>
738
+ </em-col>
739
+ </em-row>
740
+ </e-form-m>
741
+ </template>
742
+ <script lang="ts" setup>
743
+ import { reactive, ref } from 'vue';
744
+ import {
745
+ DESENDATATYPE_CHINESE_NAME,
746
+ type FormRules,
747
+ type FormInstance,
748
+ type SubmitRequestOptions,
749
+ type ValidateFieldsError
750
+ } from '@epoint-mfe/eui-components';
751
+
752
+ const formRef2 = ref();
753
+ const formData = reactive({
754
+ testtext: '测试校验文本',
755
+ name: '张三',
756
+ address: '张家港市港城大道'
757
+ });
758
+ const formRules = reactive<FormRules>({
759
+ testtext: [
760
+ {
761
+ type: 'string',
762
+ required: true,
763
+ message: '请输入',
764
+ trigger: 'change'
765
+ }
766
+ ],
767
+ name: [
768
+ {
769
+ type: 'string',
770
+ required: true,
771
+ message: '请输入',
772
+ trigger: 'change'
773
+ }
774
+ ]
775
+ });
776
+ const submit = async () => {
777
+ // 走表单验证
778
+ const validateRes = await formRef2.value.validate((valid, fields) => {
779
+ if (!valid) {
780
+ // 处理错误信息
781
+ ejs.ui.toast(`表单验证失败,错误字段:${Object.keys(fields).join('、')}`);
782
+
783
+ return;
784
+ }
785
+ });
786
+
787
+ // 验证未通过
788
+ if (!validateRes) {
789
+ return;
790
+ }
791
+
792
+ // 通过getCleanData 获取无需脱敏数据+脱敏已修改数据
793
+ const data = formRef2.value.getCleanData();
794
+
795
+ console.log('提交数据', data);
796
+
797
+ Util.ajax({
798
+ url: location.href,
799
+ data
800
+ })
801
+ .then((res) => {
802
+ ejs.ui.toast('提交成功');
803
+
804
+ // 重置表单内脱敏项的已修改情况,避免重复提交
805
+ formRef2.value.resetEditState();
806
+ })
807
+ .catch((err) => {
808
+ console.error(`提交失败 ${JSON.stringify(err)}`);
809
+ });
810
+ };
811
+ </script>
812
+ ```
813
+
814
+ ### 内部提交
815
+
816
+ 使用表单内部能力进行提交,包含脱敏数据处理。
817
+
818
+ ```html
819
+ <template>
820
+ <e-form-m
821
+ ref="formRef3"
822
+ :model="formData3"
823
+ :rules="formRules3"
824
+ :submit-url="submitUrl"
825
+ :submit-request-options="submitRequestOptions"
826
+ >
827
+ <e-form-item-m prop="testtext" label="测试" label-width="120px" :divider="false">
828
+ <e-input-m v-model="formData3.testtext" placeholder="请输入" :desensitization-type="''" />
829
+ </e-form-item-m>
830
+
831
+ <e-divider-m content-position="right">以下为敏感数据,已脱敏</e-divider-m>
832
+ <e-form-item-m prop="name" label="姓名" label-width="120px">
833
+ <e-input-m
834
+ v-model="formData3.name"
835
+ placeholder="请输入"
836
+ :desensitization-type="DESENDATATYPE_CHINESE_NAME"
837
+ />
838
+ </e-form-item-m>
839
+ <e-form-item-m prop="address" label="地址(只读)" label-width="120px" :divider="false">
840
+ <e-input-m v-model="formData3.address" placeholder="请输入" readonly />
841
+ </e-form-item-m>
842
+ <em-row>
843
+ <em-col :span="6" style="margin-left: 131px">
844
+ <e-button-m type="primary" @click="submit3">提交</e-button-m>
845
+ </em-col>
846
+ </em-row>
847
+ </e-form-m>
848
+ </template>
849
+ <script lang="ts" setup>
850
+ import { reactive, ref } from 'vue';
851
+ import {
852
+ DESENDATATYPE_CHINESE_NAME,
853
+ type FormRules,
854
+ type FormInstance,
855
+ type SubmitRequestOptions,
856
+ type ValidateFieldsError
857
+ } from '@epoint-mfe/eui-components';
858
+
859
+ const formRef3 = ref();
860
+ const formData3 = reactive({
861
+ testtext: '测试必填文本',
862
+ name: '张三',
863
+ address: '张家港市港城大道'
864
+ });
865
+ const formRules3 = reactive<FormRules>({
866
+ testtext: [
867
+ {
868
+ type: 'string',
869
+ required: true,
870
+ message: '请输入',
871
+ trigger: 'change'
872
+ }
873
+ ],
874
+ name: [
875
+ {
876
+ type: 'string',
877
+ required: true,
878
+ message: '请输入',
879
+ trigger: 'change'
880
+ }
881
+ ]
882
+ });
883
+
884
+ // 表单请求配置
885
+ const submitUrl = ref(location.href);
886
+ const submitRequestOptions: Partial<SubmitRequestOptions> = {
887
+ method: 'get',
888
+ headers: {
889
+ 'Content-Type': 'application/json;charset=UTF-8',
890
+ 'with-test-falg': '1'
891
+ },
892
+ withCredentials: false,
893
+ getRequestData: (data: Record<string, any>) => {
894
+ console.log('提交数据', data);
895
+ ejs.ui.toast(`提交数据: ${JSON.stringify(data)}`);
896
+
897
+ return data;
898
+ },
899
+ validateErrorHandler: (fields: ValidateFieldsError): void => {
900
+ ejs.ui.toast(`表单验证失败,错误字段:${Object.keys(fields).join('、')}`);
901
+ },
902
+ onSuccess: (response: any): void => {
903
+ ejs.ui.toast('提交成功');
904
+ }
905
+ };
906
+ // 表单提交
907
+ const submit3 = () => {
908
+ // 表单提交
909
+ formRef3.value.submit();
910
+ };
911
+ </script>
912
+ ```
913
+
914
+ ## Form API
915
+
916
+ ### Form Attributes
917
+
918
+ | 名称 | 描述 | 类型 | 默认值 |
919
+ | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------- |
920
+ | model | 表单组件的数据。 | `object`-`Record<string, any>` | — |
921
+ | rules | 表单的验证规则。 | `object`-`FormRules` | — |
922
+ | label-position | 标签的位置。如果设置为 `'left'` 或 `'right'`,还需要 `label-width` 属性。 | `enum`-`'left' \| 'right' \| 'top'` | top |
923
+ | label-width | 标签的宽度,例如 `'50px'`。其所有直接子表单项都将继承此值。支持 `auto`。 | `string` / `number` | — |
924
+ | label-suffix | 标签的后缀。 | `string` | — |
925
+ | value-position | label 和输入框横向展示时,输入框的位置。 | `enum`-`'left' \| 'right'` | left |
926
+ | round | 表单是否展示为圆角卡片风格 | `boolean` | true |
927
+ | hide-required-asterisk | 是否隐藏标签旁边的红色星号,表示必填字段。 | `boolean` | false |
928
+ | require-asterisk-position | 星号的位置。 | `enum`-`'left' \| 'right'` | left |
929
+ | show-message | 是否显示错误消息。 | `boolean` | true |
930
+ | error-message | 从表单上按验证类型配置统一的错误提示信息 | `object`-`Record<string, string>` | null |
931
+ | status-icon | 是否显示表示验证结果的图标。 | `boolean` | false |
932
+ | validate-on-rule-change | 当 `rules` 属性更改时,是否触发验证。 | `boolean` | true |
933
+ | size | 控制此表单中组件的大小。 | `enum`-`'large' \| 'default' \| 'small'` | — |
934
+ | disabled | 是否禁用此表单中的所有组件。如果设置为 `true`,它将覆盖内部组件的 `disabled` 属性。 | `boolean` | false |
935
+ | scroll-to-error | 验证失败时,滚动到第一个错误表单项。 | `boolean` | false |
936
+ | scroll-into-view-options | 验证失败时,根据 scrollIntoView 选项滚动到第一个错误项。[scrollIntoView](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView)。 | `object` / `boolean` | — |
937
+ | submit-url | 请求的 Url 地址 | `string` | `#` |
938
+ | submit-request-options | 请求配置,参考下面的表格 | `SubmitRequestOptions` | — |
939
+ | submit-http-request | 覆盖默认的 xhr 行为,允许你实现自己的上传文件请求。FormRequestOptions | `(options: FormRequestOptions) => XMLHttpRequest \| Promise<unknown>` | `Util.ajax` |
940
+
941
+ #### error-message 说明
942
+
943
+ `error-message` 用于统一配置表单上的错误提示信息,key 为验证类型,value 为错误提示信息,下面是一个示例:
944
+
945
+ <!-- eslint-skip -->
946
+
947
+ ```js
948
+ {
949
+ required: '这是必填字段',
950
+ number: '请输入数字值'
951
+ }
952
+ ```
953
+
954
+ 这个配置将会自动和语言包中的错误提示信息合并,如果有相同的 key,将会覆盖语言包中的错误提示信息。
955
+
956
+ 语言包中默认提示信息如下:
957
+
958
+ <!-- eslint-skip -->
959
+
960
+ ```js
961
+ {
962
+ /**
963
+ * 支持的占位符
964
+ * - name: 文本类型,FormItem 里面的文字,没有时降级为 filed
965
+ * - filed: 文本类型,FormItem 所关联的prop值
966
+ * - value: 任意类型,当前 FormItem 的值
967
+ * - ...: 其他所有来自 验证规则的字段,如 type、min、max、enums 等
968
+ */
969
+ _validateRuntime: '验证过程中出错了:',
970
+ required: '${name}必填',
971
+ whitespace: '${name}不能是空白',
972
+ boolean: '${name}数据类型必须是布尔类型',
973
+ number: '${name}必须是数字',
974
+ string: '${name}必须是字符串',
975
+ enum: '${name}只能是${enums}等',
976
+ date: '请输入正确的${name},必须是日期',
977
+ url: '请输入正确的${name},必须是url格式',
978
+ email: '请输入正确的${name},必须是邮箱格式',
979
+ idCard:
980
+ '输入的身份证号码格式不正确,若最后一位为“X”则只允许输入大写的“X”',
981
+ hkIdCard: '输入的香港身份证号码格式不正确',
982
+ orgCode: '输入的组织机构代码格式不正确',
983
+ creditCode: '输入的统一社会信用代码格式不正确',
984
+ postCode: '输入的邮政编码格式不正确',
985
+ pattern: '请输入正确的${name}',
986
+ }
987
+ ```
988
+
989
+ #### SubmitRequestOptions 说明
990
+
991
+ 表单属性,请求入参配置
992
+
993
+ | Name | Description | Type | Default |
994
+ | -------------------- | ----------------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------- |
995
+ | method | 设置上传请求的方法 | `string` | post |
996
+ | headers | 请求头部信息 | `Headers \| Record<string, any>` | {} |
997
+ | withCredentials | 是否发送 cookies | `boolean` | false |
998
+ | getRequestData | 获取请求 data 入参,入参为 getCleanData 获取数据 | `(cleanData: Record<string, any) => Record<string, any>` | `(cleanData) => { return { params: JSON.stringify(cleanData) }; }` |
999
+ | validateErrorHandler | 表单验证错误处理 | `(fields: ValidateFieldsError) => void` | `(fields) => { fields && EpMessage.warning('表单校验未通过,请检查表单字段填写情况'); }` |
1000
+ | onSuccess | 上传成功时的钩子函数 | `(response: any) => void` | `(res) => { EpMessage.error('提交成功'); }` |
1001
+ | onError | 发生错误时的钩子函数 | `(error: Error) => void` | `(err) => { EpMessage.error('提交失败'); }` |
1002
+
1003
+ #### FormRequestOptions 说明
1004
+
1005
+ 请求方法,入参参考
1006
+
1007
+ | Name | Description | Type |
1008
+ | -------------------- | -------------------- | --------------------------------------- |
1009
+ | action | 请求地址 | `string` |
1010
+ | method | 设置上传请求的方法 | `string` |
1011
+ | headers | 请求头部信息 | `Headers \| Record<string, any>` |
1012
+ | withCredentials | 是否发送 cookies | `boolean` |
1013
+ | data | 请求数据 | `Record<string, any>` |
1014
+ | validateErrorHandler | 表单验证错误处理 | `(fields: ValidateFieldsError) => void` |
1015
+ | onSuccess | 上传成功时的钩子函数 | `(response: any) => void` |
1016
+ | onError | 发生错误时的钩子函数 | `(error: Error) => void` |
1017
+
1018
+ ### Form Events
1019
+
1020
+ | Name | Description | Type |
1021
+ | -------- | -------------------- | ----------------------------------------------------------------------------- |
1022
+ | validate | 在验证表单项后触发。 | `Function`- `(prop: FormItemProp, isValid: boolean, message: string) => void` |
1023
+
1024
+ ### Form Exposes
1025
+
1026
+ | Name | Description | Type |
1027
+ | -------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
1028
+ | validate | 验证整个表单。接受回调函数或返回 `Promise`。 | `Function` - `(callback?: (isValid: boolean, invalidFields?: ValidateFieldsError) => void) => Promise<void>` |
1029
+ | fastValidate | 快速验证整个表单(第一个字段验证失败就立即返回)。接受回调函数或返回 `Promise`。 | `Function` - `(callback?: (isValid: boolean, invalidFields?: ValidateFieldsError) => void) => Promise<void>` |
1030
+ | validateField | 验证指定字段。 | `Function` - `(props?: FormItemProp \| FormItemProp[], callback?: (isValid: boolean, invalidFields?: ValidateFieldsError) => void) => Promise<void>` |
1031
+ | resetFields | 重置指定字段并移除验证结果。 | `Function` - `(props?: FormItemProp \| FormItemProp[]) => void` |
1032
+ | scrollToField | 滚动到指定字段。 | `Function` - `(prop: FormItemProp) => void` |
1033
+ | clearValidate | 清除指定字段的验证消息。 | `Function` - `(props?: FormItemProp \| FormItemProp[]) => void` |
1034
+ | getCleanData | 获得无需脱敏、脱敏已修改、未设置只读的数据集合。 | `Function` - `() => Record<string, any>` |
1035
+ | resetEditState | 重置其下脱敏组件的修改状态。 | `Function` - `() => void` |
1036
+ | submit | 表单提交。 | `Function` - `() => void` |
1037
+
1038
+ ### Form Slots
1039
+
1040
+ | Name | Description | Subtags |
1041
+ | ------- | -------------- | -------- |
1042
+ | default | 自定义默认内容 | FormItem |
1043
+
1044
+ ## FormItem API
1045
+
1046
+ ### FormItem Attributes
1047
+
1048
+ | Name | Description | Type | Default |
1049
+ | --------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------- |
1050
+ | prop | `model` 的键。它可以是一个属性路径的数组(例如 `['a', 'b', 0]`)。在使用 `validate` 和 `resetFields` 方法时,该属性是必需的。 | `string` / `string[]` | — |
1051
+ | label | 标签文本。 | `string` | — |
1052
+ | label-position | 标签的位置。如果设置为 'left' 或 'right',还需要 label-width 属性。 | `enum`-`'left' \| 'right' \| 'top'` | `top` |
1053
+ | label-width | 标签宽度,例如 `'50px'`。支持 `'auto'`。 | `string` / `number` | — |
1054
+ | value-position | label 和输入框横向展示时,输入框的位置。 | `enum`-`'left' \| 'right'` | left |
1055
+ | required | 字段是否必填,如果省略,将由验证规则确定。 | `boolean` | false |
1056
+ | rules | 表单的验证规则,请参考[下面的表格](#formitemrule) | ` object` `FormItemRule \| FormItemRule[] ` | — |
1057
+ | error | 字段错误消息,设置其值,字段将立即验证错误并显示此消息。 | `string` | — |
1058
+ | show-message | 是否显示错误消息。 | `boolean` | true |
1059
+ | size | 控制该表单项中组件的大小。 | `enum` - `'large' \| 'default' \| 'small'` | default |
1060
+ | label-tooltip | 设置表单项 label 区域的帮助提示。 | `string` \ `EpTooltipProps` | - |
1061
+ | tooltip | 设置表单项控件区域的帮助提示。 | `string` \ `EpTooltipProps` | - |
1062
+ | for | 与原生标签中的 `for` 相同。 | `string` | — |
1063
+ | validate-status | 表单项的验证状态。 | `enum` - `'' \| 'error' \| 'validating' \| 'success'` | — |
1064
+
1065
+ ### FormItem Slots
1066
+
1067
+ | Name | Description | Type |
1068
+ | ------- | -------------------------------------------- | ------------------------------ |
1069
+ | default | 表单项的默认内容。 | — |
1070
+ | label | 自定义标签的显示内容。 | `object` - `{ label: string }` |
1071
+ | error | 自定义验证消息的显示内容。 | `object` - `{ error: string }` |
1072
+ | top | 用于在表单项上方添加始终可见的辅助说明文本。 | - |
1073
+ | extra | 用于在表单项下方添加始终可见的辅助说明文本。 | - |
1074
+
1075
+ ### FormItem Exposes
1076
+
1077
+ | Name | Description | Type |
1078
+ | --------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------- |
1079
+ | size | 表单项的大小。 | `object` - `ComputedRef<'' \| 'large' \| 'default' \| 'small'>` |
1080
+ | validateMessage | 验证消息。 | ` object``Ref<string> ` |
1081
+ | validateState | 验证状态。 | `object` - `Ref<'' \| 'error' \| 'validating' \| 'success'>` |
1082
+ | validate | 验证表单项。 | `Function` - `(trigger: string, callback?: FormValidateCallback \| undefined) => FormValidationResult` |
1083
+ | resetField | 重置当前字段并删除验证结果。 | `Function` - `() => void` |
1084
+ | clearValidate | 移除字段的验证状态。 | `Function` - `() => void` |
1085
+
1086
+ ## 验证规则
1087
+
1088
+ 验证规则的通用属性如下表:
1089
+
1090
+ | Name | Description | Type | Default |
1091
+ | --------- | -------------------- | ------------------------------------------------------------------------------------------ | ------- |
1092
+ | trigger | 触发验证的方式。 | `enum` - `'blur' \| 'change' \| ['blur'] \| ['change'] \| ['blur', 'change']` | — |
1093
+ | required | 是否必填 | `boolean` | — |
1094
+ | message | 验证失败时的错误消息 | `string` | — |
1095
+ | validator | 自定义的验证函数 | `Function` - `(val:any, option) => boolean \| Promise<boolean> \| Error \| Promise<Error>` | — |
1096
+ | type | 验证的类型 | 详见下表 | — |
1097
+
1098
+ 内置的验证规则如下表,你可以直接使用 `{type: "某个验证规则"}` 进行配置,但请注意,某些验证规则必须提供配置,如 `type: 'enum'` 则必须提供 `enums`。
1099
+
1100
+ | Type | Options | Description |
1101
+ | ----------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------- |
1102
+ | required | -- | 必填的验证规则 |
1103
+ | boolean | -- | 必须是布尔值 |
1104
+ | number | `IsNumberOptions` - `{min?:number; max?:number}` | 必须是数值 |
1105
+ | string | `LengthOptions` | 必须是字符串 |
1106
+ | enum | `IsEnumOptions` | 必须是指定的选项之一 |
1107
+ | date | `IsDateOptions` | 必须是日期 |
1108
+ | url | `IsURLOptions` | 必须是 url |
1109
+ | email | `IsEmailOptions` | 必须是 email |
1110
+ | postCode | -- | 是否为邮政编码 |
1111
+ | pattern | `PatternValidatoroptions` | 是符合给定的正则表达式 |
1112
+ | idCard | `IDCardOptions` | 必须是身份证号码 |
1113
+ | hkIdCard | -- | 必须是香港的身份证号码 |
1114
+ | float | `IsF9FloatOptions` - `{min?: number; max?: number; maxDecimalLength?: number; maxLength?: number;}` | 是否是小数(只判断形式不判断类型) |
1115
+ | int | `IsF9IntOptions` - `{min?:number; max?:number}` | 是否是 int(只判断形式不判断类型) |
1116
+ | creditCode | -- | 是否为统一社会信用代码 |
1117
+ | orgCode | -- | 是否为组织机构代码(包含社会信用代码) |
1118
+ | phone | -- | 是否是电话号码 |
1119
+ | mobile | -- | 是否为手机号 |
1120
+ | tel | -- | 是否为固定电话号码 |
1121
+ | phoneWithShortNum | -- | 更弱的电话号码验证 |
1122
+ | projectCode | -- | 投资项目统一代码 |
1123
+
1124
+ #### Options 说明
1125
+
1126
+ 各个内置的验证规则的 `options` 类型定义如下。
1127
+
1128
+ ```ts
1129
+ interface IsNumberOptions {
1130
+ min?: number; // 最小值
1131
+ max?: number; // 最大值
1132
+ }
1133
+
1134
+ interface LengthOptions {
1135
+ min?: number; // 最小长度
1136
+ max?: number; // 最大长度
1137
+ asciiDouble?: boolean; // 是否将非ascii字符长度计为2
1138
+ }
1139
+
1140
+ interface IsEnumOptions {
1141
+ enums: Array<any>; // 选项列表, eg:['a', 'b', 'c]
1142
+ strict?: boolean; // 是否严格匹配
1143
+ /**
1144
+ * 自定义的比较器,配置了将使用此函数的返回值作为判断依据
1145
+ * 第一个参数为 迭代器当前值,第二个参数为当前的验证的值
1146
+ *
1147
+ * @memberof IsEnumOptions
1148
+ */
1149
+ compare?: (a: any, b: any) => boolean;
1150
+ }
1151
+
1152
+ interface IsDateOptions {
1153
+ /**
1154
+ * @default false
1155
+ */
1156
+ format?: string | undefined;
1157
+ /**
1158
+ * If strictMode is set to true,
1159
+ * the validator will reject inputs different from format.
1160
+ *
1161
+ * @default false
1162
+ */
1163
+ strictMode?: boolean | undefined;
1164
+ /**
1165
+ * `delimiters` is an array of allowed date delimiters
1166
+ *
1167
+ * @default ['/', '-']
1168
+ */
1169
+ delimiters?: string[] | undefined;
1170
+ }
1171
+ interface IsURLOptions {
1172
+ /**
1173
+ * @default ['http','https','ftp']
1174
+ */
1175
+ protocols?: string[] | undefined;
1176
+ /**
1177
+ * @default true
1178
+ */
1179
+ require_tld?: boolean | undefined;
1180
+ /**
1181
+ * @default false
1182
+ */
1183
+ require_protocol?: boolean | undefined;
1184
+ /**
1185
+ * @default true
1186
+ */
1187
+ require_host?: boolean | undefined;
1188
+ /**
1189
+ * if set as true isURL will check if port is present in the URL
1190
+ * @default false
1191
+ */
1192
+ require_port?: boolean | undefined;
1193
+ /**
1194
+ * @default true
1195
+ */
1196
+ require_valid_protocol?: boolean | undefined;
1197
+ /**
1198
+ * @default false
1199
+ */
1200
+ allow_underscores?: boolean | undefined;
1201
+ /**
1202
+ * @default false
1203
+ */
1204
+ host_whitelist?: Array<string | RegExp> | undefined;
1205
+ /**
1206
+ * @default false
1207
+ */
1208
+ host_blacklist?: Array<string | RegExp> | undefined;
1209
+ /**
1210
+ * @default false
1211
+ */
1212
+ allow_trailing_dot?: boolean | undefined;
1213
+ /**
1214
+ * @default false
1215
+ */
1216
+ allow_protocol_relative_urls?: boolean | undefined;
1217
+ /**
1218
+ * @default false
1219
+ */
1220
+ disallow_auth?: boolean | undefined;
1221
+ /**
1222
+ * @default true
1223
+ */
1224
+ allow_fragments?: boolean | undefined;
1225
+ /**
1226
+ * @default true
1227
+ */
1228
+ allow_query_components?: boolean | undefined;
1229
+ /**
1230
+ * @default true
1231
+ */
1232
+ validate_length?: boolean | undefined;
1233
+ }
1234
+
1235
+ interface IsEmailOptions {
1236
+ /**
1237
+ * If `allow_display_name` is set to `true`, the validator will also match `Display Name <email-address>`.
1238
+ *
1239
+ * @default false
1240
+ */
1241
+ allow_display_name?: boolean | undefined;
1242
+ /**
1243
+ * If `require_display_name` is set to `true`, the validator will reject strings without the format `Display Name <email-address>`.
1244
+ *
1245
+ * @default false
1246
+ */
1247
+ require_display_name?: boolean | undefined;
1248
+ /**
1249
+ * If `allow_utf8_local_part` is set to `false`, the validator will not allow any non-English UTF8 character in email address' local part.
1250
+ *
1251
+ * @default true
1252
+ */
1253
+ allow_utf8_local_part?: boolean | undefined;
1254
+ /**
1255
+ * If `require_tld` is set to `false`, e-mail addresses without having TLD in their domain will also be matched.
1256
+ *
1257
+ * @default true
1258
+ */
1259
+ require_tld?: boolean | undefined;
1260
+ /**
1261
+ * If `ignore_max_length` is set to `true`, the validator will not check for the standard max length of an email.
1262
+ *
1263
+ * @default false
1264
+ */
1265
+ ignore_max_length?: boolean | undefined;
1266
+ /**
1267
+ * If `allow_ip_domain` is set to `true`, the validator will allow IP addresses in the host part.
1268
+ *
1269
+ * @default false
1270
+ */
1271
+ allow_ip_domain?: boolean | undefined;
1272
+ /**
1273
+ * If `domain_specific_validation` is `true`, some additional validation will be enabled,
1274
+ * e.g. disallowing certain syntactically valid email addresses that are rejected by GMail.
1275
+ *
1276
+ * @default false
1277
+ */
1278
+ domain_specific_validation?: boolean | undefined;
1279
+ /**
1280
+ * If host_blacklist is set to an array of strings
1281
+ * and the part of the email after the @ symbol matches one of the strings defined in it,
1282
+ * the validation fails.
1283
+ */
1284
+ host_blacklist?: string[] | undefined;
1285
+ /**
1286
+ * If host_whitelist is set to an array of strings
1287
+ * and the part of the email after the @ symbol matches none of the strings defined in it,
1288
+ * the validation fails.
1289
+ */
1290
+ host_whitelist?: string[] | undefined;
1291
+ /**
1292
+ * If blacklisted_chars receives a string, then the validator will reject emails that include
1293
+ * any of the characters in the string, in the name part.
1294
+ */
1295
+ blacklisted_chars?: string | undefined;
1296
+ }
1297
+
1298
+ type IDCardOptions = {
1299
+ ignoreX: boolean; // 是否忽略X的大小写
1300
+ };
1301
+
1302
+ interface PatternValidatoroptions {
1303
+ regexp: RegExp; // 要匹配的正则表达
1304
+ }
1305
+
1306
+ interface IsF9FloatOptions {
1307
+ min?: number; // 最小值
1308
+ max?: number; // 最大值
1309
+ maxDecimalLength?: number; // 小数部分最大长度
1310
+ maxLength?: number; // 总的长度限制
1311
+ }
1312
+
1313
+ export interface IsF9IntOptions {
1314
+ min?: number; // 最小值
1315
+ max?: number; // 最大值
1316
+ }
1317
+ ```
1318
+
1319
+ 如果不想基于输入事件触发验证器,请在相应的输入类型组件(`<e-input-m>`,`<e-radio-m>`,...)上将 `validate-event` 属性设置为 `false`。
1320
+
1321
+ ::: ifdef M84
1322
+ <iframe
1323
+ src="//app.epoint.com.cn/m8mpdoc/showcase/m8.4/index.html#/modules/epshowcase/examples/e-form-m"
1324
+ frameborder=0
1325
+ allowfullscreen class="ui-showcase-iframe">
1326
+ </iframe>
1327
+ ::: endif
1328
+
1329
+ <style>
1330
+ .ui-showcase-iframe {
1331
+ position: fixed;
1332
+ right: 3.5vw;
1333
+ top: 17%;
1334
+ width: 375px;
1335
+ height: 75vh;
1336
+ box-shadow: 0 0 12px 6px #eee;
1337
+ border-radius: 15px;
1338
+ }
1339
+ .main .markdown-body {
1340
+ padding: 45px;
1341
+ width: calc(97vw - 661px);
1342
+ }
1343
+ </style>