@pisell/private-materials 6.3.30 → 6.3.32

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 (287) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +9 -1
  6. package/build/lowcode/preview.js +146 -146
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +9 -9
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +9 -9
  11. package/es/components/appointmentBooking/components/Cart/Item/index.d.ts +1 -1
  12. package/es/components/appointmentBooking/components/Cart/Item/index.js +3 -2
  13. package/es/components/appointmentBooking/components/ConfirmInformation/index.js +267 -76
  14. package/es/components/appointmentBooking/components/ConfirmInformation/index.less +15 -0
  15. package/es/components/appointmentBooking/hooks.d.ts +1 -0
  16. package/es/components/appointmentBooking/hooks.js +30 -30
  17. package/es/components/appointmentBooking/locales.d.ts +3 -0
  18. package/es/components/appointmentBooking/locales.js +9 -6
  19. package/es/components/booking/addons/model.d.ts +10 -1
  20. package/es/components/booking/components/footer/index.js +4 -1
  21. package/es/components/booking/components/footer/utils.js +62 -46
  22. package/es/components/booking/forms/model.d.ts +10 -1
  23. package/es/components/booking/info/clientVariant/hooks/useClientFn.js +2 -2
  24. package/es/components/booking/info/clientVariant/vertical/index.js +1 -1
  25. package/es/components/booking/info/main.js +3 -2
  26. package/es/components/booking/info/model.d.ts +10 -1
  27. package/es/components/booking/info/model.js +5 -0
  28. package/es/components/booking/info/service/addService/utils.d.ts +1 -1
  29. package/es/components/booking/info2/index.js +3 -2
  30. package/es/components/booking/info2/service/addService/utils.d.ts +1 -1
  31. package/es/components/booking/info2/service/contactInfoMode/index.d.ts +2 -0
  32. package/es/components/booking/info2/service/contactInfoMode/index.js +94 -0
  33. package/es/components/booking/locales.d.ts +3 -0
  34. package/es/components/booking/locales.js +9 -3
  35. package/es/components/booking/model.d.ts +13 -1
  36. package/es/components/booking/model.js +3 -0
  37. package/es/components/booking/notes/model.d.ts +10 -1
  38. package/es/components/booking/payments/model.d.ts +10 -1
  39. package/es/components/eftposPay/amount.d.ts +1 -1
  40. package/es/components/eftposPay/device.d.ts +1 -1
  41. package/es/components/eftposPay/store/index.d.ts +2 -2
  42. package/es/components/pay/toC/model.d.ts +9 -1
  43. package/es/components/schedules/model.d.ts +9 -1
  44. package/es/components/ticketBooking/components/ticketBooking/index.less +2 -1
  45. package/es/components/wallet/Detail/model.d.ts +13 -1
  46. package/es/components/wallet/DiscountCard/model.d.ts +14 -1
  47. package/es/components/wallet/PointCard/model.d.ts +13 -1
  48. package/es/components/wallet/RechargeableCard/model.d.ts +29 -1
  49. package/es/components/wallet/Voucher/model.d.ts +13 -1
  50. package/es/components/wallet/model.d.ts +9 -1
  51. package/es/index.d.ts +3 -0
  52. package/es/index.js +4 -1
  53. package/es/plus/clientName/index.d.ts +4 -0
  54. package/es/plus/clientName/index.js +18 -0
  55. package/es/plus/clientName/index.less +10 -0
  56. package/es/plus/clientName/type.d.ts +13 -0
  57. package/es/plus/clientName/type.js +1 -0
  58. package/es/plus/clientName/utils.d.ts +2 -0
  59. package/es/plus/clientName/utils.js +18 -0
  60. package/es/plus/contactInfo/components/Avatar/index.d.ts +10 -0
  61. package/es/plus/contactInfo/components/Avatar/index.js +30 -0
  62. package/es/plus/contactInfo/components/SwipeAction/index.d.ts +46 -0
  63. package/es/plus/contactInfo/components/SwipeAction/index.js +360 -0
  64. package/es/plus/contactInfo/components/SwipeAction/index.less +74 -0
  65. package/es/plus/contactInfo/index.d.ts +6 -0
  66. package/es/plus/contactInfo/index.js +198 -0
  67. package/es/plus/contactInfo/index.less +621 -0
  68. package/es/plus/contactInfo/locales.d.ts +15 -0
  69. package/es/plus/contactInfo/locales.js +14 -0
  70. package/es/plus/contactInfo/types.d.ts +91 -0
  71. package/es/plus/contactInfo/types.js +1 -0
  72. package/es/plus/contactInfo/utils.d.ts +7 -0
  73. package/es/plus/contactInfo/utils.js +50 -0
  74. package/es/plus/contactInfoModal/ContactInfoContent.d.ts +3 -0
  75. package/es/plus/contactInfoModal/ContactInfoContent.js +74 -0
  76. package/es/plus/contactInfoModal/index.d.ts +40 -0
  77. package/es/plus/contactInfoModal/index.js +154 -0
  78. package/es/plus/contactInfoModal/index.less +19 -0
  79. package/es/plus/contactInfoModal/locales.d.ts +66 -0
  80. package/es/plus/contactInfoModal/locales.js +65 -0
  81. package/es/pro/Login2.0/AuthModal.d.ts +143 -0
  82. package/es/pro/Login2.0/AuthModal.js +624 -0
  83. package/es/pro/Login2.0/Login2.d.ts +61 -0
  84. package/es/pro/Login2.0/Login2.js +2157 -0
  85. package/es/pro/Login2.0/Register2.d.ts +65 -0
  86. package/es/pro/Login2.0/Register2.js +1501 -0
  87. package/es/pro/Login2.0/components/ForgotPasswordFlow.d.ts +31 -0
  88. package/es/pro/Login2.0/components/ForgotPasswordFlow.js +330 -0
  89. package/es/pro/Login2.0/components/LegalTerms.d.ts +8 -0
  90. package/es/pro/Login2.0/components/LegalTerms.js +51 -0
  91. package/es/pro/Login2.0/components/LegalTerms.less +74 -0
  92. package/es/pro/Login2.0/components/LoginCodeInput.d.ts +27 -0
  93. package/es/pro/Login2.0/components/LoginCodeInput.js +207 -0
  94. package/es/pro/Login2.0/components/OAuthButtonGroup.d.ts +22 -0
  95. package/es/pro/Login2.0/components/OAuthButtonGroup.js +55 -0
  96. package/es/pro/Login2.0/components/PhoneInput.d.ts +53 -0
  97. package/es/pro/Login2.0/components/PhoneInput.js +414 -0
  98. package/es/pro/Login2.0/components/PhoneInput.less +148 -0
  99. package/es/pro/Login2.0/components/phoneValidation.d.ts +17 -0
  100. package/es/pro/Login2.0/components/phoneValidation.js +228 -0
  101. package/es/pro/Login2.0/hooks/index.d.ts +2 -0
  102. package/es/pro/Login2.0/hooks/index.js +1 -0
  103. package/es/pro/Login2.0/hooks/usePasswordValidationRules.d.ts +24 -0
  104. package/es/pro/Login2.0/hooks/usePasswordValidationRules.js +87 -0
  105. package/es/pro/Login2.0/hooks/useRegisterFlow.d.ts +39 -0
  106. package/es/pro/Login2.0/hooks/useRegisterFlow.js +158 -0
  107. package/es/pro/Login2.0/hooks/useRegistrationMethods.d.ts +9 -0
  108. package/es/pro/Login2.0/hooks/useRegistrationMethods.js +31 -0
  109. package/es/pro/Login2.0/index.js +8 -0
  110. package/es/pro/Login2.0/index.less +993 -0
  111. package/es/pro/Login2.0/locales.d.ts +543 -0
  112. package/es/pro/Login2.0/locales.js +622 -0
  113. package/es/pro/Login2.0/shared/Header.d.ts +11 -0
  114. package/es/pro/Login2.0/shared/Header.js +42 -0
  115. package/es/pro/Login2.0/shared/OAuthButtons.d.ts +11 -0
  116. package/es/pro/Login2.0/shared/OAuthButtons.js +59 -0
  117. package/es/pro/Login2.0/shared/registerFlow.d.ts +116 -0
  118. package/es/pro/Login2.0/shared/registerFlow.js +171 -0
  119. package/es/pro/Login2.0/shared/types.d.ts +232 -0
  120. package/es/pro/Login2.0/shared/types.js +1 -0
  121. package/es/pro/Login2.0/steps/CodeInput.d.ts +24 -0
  122. package/es/pro/Login2.0/steps/CodeInput.js +209 -0
  123. package/es/pro/Login2.0/steps/EmailAlreadyRegistered.d.ts +12 -0
  124. package/es/pro/Login2.0/steps/EmailAlreadyRegistered.js +35 -0
  125. package/es/pro/Login2.0/steps/EmailLinkAlreadyUsed.d.ts +7 -0
  126. package/es/pro/Login2.0/steps/EmailLinkAlreadyUsed.js +25 -0
  127. package/es/pro/Login2.0/steps/EmailLinkExpired.d.ts +9 -0
  128. package/es/pro/Login2.0/steps/EmailLinkExpired.js +33 -0
  129. package/es/pro/Login2.0/steps/SetPassword.d.ts +19 -0
  130. package/es/pro/Login2.0/steps/SetPassword.js +148 -0
  131. package/es/pro/Login2.0/steps/VerificationSuccess.d.ts +8 -0
  132. package/es/pro/Login2.0/steps/VerificationSuccess.js +35 -0
  133. package/es/pro/Login2.0/steps/VerifyingEmailLink.d.ts +7 -0
  134. package/es/pro/Login2.0/steps/VerifyingEmailLink.js +17 -0
  135. package/es/pro/Login2.0/steps/WaitEmailLink.d.ts +18 -0
  136. package/es/pro/Login2.0/steps/WaitEmailLink.js +54 -0
  137. package/es/pro/Login2.0/steps/index.d.ts +19 -0
  138. package/es/pro/Login2.0/steps/index.js +11 -0
  139. package/es/pro/Login2.0/steps/steps.less +423 -0
  140. package/es/pro/Login2.0/types.d.ts +167 -0
  141. package/es/pro/Login2.0/types.js +1 -0
  142. package/lib/components/appointmentBooking/components/Cart/Item/index.d.ts +1 -1
  143. package/lib/components/appointmentBooking/components/Cart/Item/index.js +5 -3
  144. package/lib/components/appointmentBooking/components/ConfirmInformation/index.js +151 -13
  145. package/lib/components/appointmentBooking/components/ConfirmInformation/index.less +15 -0
  146. package/lib/components/appointmentBooking/hooks.d.ts +1 -0
  147. package/lib/components/appointmentBooking/hooks.js +73 -35
  148. package/lib/components/appointmentBooking/locales.d.ts +3 -0
  149. package/lib/components/appointmentBooking/locales.js +6 -3
  150. package/lib/components/booking/addons/model.d.ts +10 -1
  151. package/lib/components/booking/components/footer/index.js +4 -1
  152. package/lib/components/booking/components/footer/utils.js +70 -38
  153. package/lib/components/booking/forms/model.d.ts +10 -1
  154. package/lib/components/booking/info/clientVariant/hooks/useClientFn.js +1 -1
  155. package/lib/components/booking/info/clientVariant/vertical/index.js +34 -17
  156. package/lib/components/booking/info/main.js +5 -4
  157. package/lib/components/booking/info/model.d.ts +10 -1
  158. package/lib/components/booking/info/model.js +5 -0
  159. package/lib/components/booking/info/service/addService/utils.d.ts +1 -1
  160. package/lib/components/booking/info2/index.js +5 -4
  161. package/lib/components/booking/info2/service/addService/utils.d.ts +1 -1
  162. package/lib/components/booking/info2/service/contactInfoMode/index.d.ts +2 -0
  163. package/lib/components/booking/info2/service/contactInfoMode/index.js +111 -0
  164. package/lib/components/booking/locales.d.ts +3 -0
  165. package/lib/components/booking/locales.js +9 -3
  166. package/lib/components/booking/model.d.ts +13 -1
  167. package/lib/components/booking/model.js +3 -0
  168. package/lib/components/booking/notes/model.d.ts +10 -1
  169. package/lib/components/booking/payments/model.d.ts +10 -1
  170. package/lib/components/eftposPay/amount.d.ts +1 -1
  171. package/lib/components/eftposPay/device.d.ts +1 -1
  172. package/lib/components/eftposPay/store/index.d.ts +2 -2
  173. package/lib/components/pay/toC/model.d.ts +9 -1
  174. package/lib/components/schedules/model.d.ts +9 -1
  175. package/lib/components/ticketBooking/components/ticketBooking/index.less +2 -1
  176. package/lib/components/wallet/Detail/model.d.ts +13 -1
  177. package/lib/components/wallet/DiscountCard/model.d.ts +14 -1
  178. package/lib/components/wallet/PointCard/model.d.ts +13 -1
  179. package/lib/components/wallet/RechargeableCard/model.d.ts +29 -1
  180. package/lib/components/wallet/Voucher/model.d.ts +13 -1
  181. package/lib/components/wallet/model.d.ts +9 -1
  182. package/lib/index.d.ts +3 -0
  183. package/lib/index.js +13 -0
  184. package/lib/plus/clientName/index.d.ts +4 -0
  185. package/lib/plus/clientName/index.js +53 -0
  186. package/lib/plus/clientName/index.less +10 -0
  187. package/lib/plus/clientName/type.d.ts +13 -0
  188. package/lib/plus/clientName/type.js +17 -0
  189. package/lib/plus/clientName/utils.d.ts +2 -0
  190. package/lib/plus/clientName/utils.js +43 -0
  191. package/lib/plus/contactInfo/components/Avatar/index.d.ts +10 -0
  192. package/lib/plus/contactInfo/components/Avatar/index.js +56 -0
  193. package/lib/plus/contactInfo/components/SwipeAction/index.d.ts +46 -0
  194. package/lib/plus/contactInfo/components/SwipeAction/index.js +373 -0
  195. package/lib/plus/contactInfo/components/SwipeAction/index.less +74 -0
  196. package/lib/plus/contactInfo/index.d.ts +6 -0
  197. package/lib/plus/contactInfo/index.js +226 -0
  198. package/lib/plus/contactInfo/index.less +621 -0
  199. package/lib/plus/contactInfo/locales.d.ts +15 -0
  200. package/lib/plus/contactInfo/locales.js +38 -0
  201. package/lib/plus/contactInfo/types.d.ts +91 -0
  202. package/lib/plus/contactInfo/types.js +17 -0
  203. package/lib/plus/contactInfo/utils.d.ts +7 -0
  204. package/lib/plus/contactInfo/utils.js +64 -0
  205. package/lib/plus/contactInfoModal/ContactInfoContent.d.ts +3 -0
  206. package/lib/plus/contactInfoModal/ContactInfoContent.js +129 -0
  207. package/lib/plus/contactInfoModal/index.d.ts +40 -0
  208. package/lib/plus/contactInfoModal/index.js +138 -0
  209. package/lib/plus/contactInfoModal/index.less +19 -0
  210. package/lib/plus/contactInfoModal/locales.d.ts +66 -0
  211. package/lib/plus/contactInfoModal/locales.js +89 -0
  212. package/lib/pro/Login2.0/AuthModal.d.ts +143 -0
  213. package/lib/pro/Login2.0/AuthModal.js +498 -0
  214. package/lib/pro/Login2.0/Login2.d.ts +61 -0
  215. package/lib/pro/Login2.0/Login2.js +1468 -0
  216. package/lib/pro/Login2.0/Register2.d.ts +65 -0
  217. package/lib/pro/Login2.0/Register2.js +1062 -0
  218. package/lib/pro/Login2.0/components/ForgotPasswordFlow.d.ts +31 -0
  219. package/lib/pro/Login2.0/components/ForgotPasswordFlow.js +213 -0
  220. package/lib/pro/Login2.0/components/LegalTerms.d.ts +8 -0
  221. package/lib/pro/Login2.0/components/LegalTerms.js +76 -0
  222. package/lib/pro/Login2.0/components/LegalTerms.less +74 -0
  223. package/lib/pro/Login2.0/components/LoginCodeInput.d.ts +27 -0
  224. package/lib/pro/Login2.0/components/LoginCodeInput.js +161 -0
  225. package/lib/pro/Login2.0/components/OAuthButtonGroup.d.ts +22 -0
  226. package/lib/pro/Login2.0/components/OAuthButtonGroup.js +87 -0
  227. package/lib/pro/Login2.0/components/PhoneInput.d.ts +53 -0
  228. package/lib/pro/Login2.0/components/PhoneInput.js +263 -0
  229. package/lib/pro/Login2.0/components/PhoneInput.less +148 -0
  230. package/lib/pro/Login2.0/components/phoneValidation.d.ts +17 -0
  231. package/lib/pro/Login2.0/components/phoneValidation.js +153 -0
  232. package/lib/pro/Login2.0/hooks/index.d.ts +2 -0
  233. package/lib/pro/Login2.0/hooks/index.js +29 -0
  234. package/lib/pro/Login2.0/hooks/usePasswordValidationRules.d.ts +24 -0
  235. package/lib/pro/Login2.0/hooks/usePasswordValidationRules.js +140 -0
  236. package/lib/pro/Login2.0/hooks/useRegisterFlow.d.ts +39 -0
  237. package/lib/pro/Login2.0/hooks/useRegisterFlow.js +149 -0
  238. package/lib/pro/Login2.0/hooks/useRegistrationMethods.d.ts +9 -0
  239. package/lib/pro/Login2.0/hooks/useRegistrationMethods.js +51 -0
  240. package/lib/pro/Login2.0/index.js +45 -0
  241. package/lib/pro/Login2.0/index.less +993 -0
  242. package/lib/pro/Login2.0/locales.d.ts +543 -0
  243. package/lib/pro/Login2.0/locales.js +646 -0
  244. package/lib/pro/Login2.0/shared/Header.d.ts +11 -0
  245. package/lib/pro/Login2.0/shared/Header.js +81 -0
  246. package/lib/pro/Login2.0/shared/OAuthButtons.d.ts +11 -0
  247. package/lib/pro/Login2.0/shared/OAuthButtons.js +78 -0
  248. package/lib/pro/Login2.0/shared/registerFlow.d.ts +116 -0
  249. package/lib/pro/Login2.0/shared/registerFlow.js +235 -0
  250. package/lib/pro/Login2.0/shared/types.d.ts +232 -0
  251. package/lib/pro/Login2.0/shared/types.js +17 -0
  252. package/lib/pro/Login2.0/steps/CodeInput.d.ts +24 -0
  253. package/lib/pro/Login2.0/steps/CodeInput.js +160 -0
  254. package/lib/pro/Login2.0/steps/EmailAlreadyRegistered.d.ts +12 -0
  255. package/lib/pro/Login2.0/steps/EmailAlreadyRegistered.js +46 -0
  256. package/lib/pro/Login2.0/steps/EmailLinkAlreadyUsed.d.ts +7 -0
  257. package/lib/pro/Login2.0/steps/EmailLinkAlreadyUsed.js +51 -0
  258. package/lib/pro/Login2.0/steps/EmailLinkExpired.d.ts +9 -0
  259. package/lib/pro/Login2.0/steps/EmailLinkExpired.js +51 -0
  260. package/lib/pro/Login2.0/steps/SetPassword.d.ts +19 -0
  261. package/lib/pro/Login2.0/steps/SetPassword.js +131 -0
  262. package/lib/pro/Login2.0/steps/VerificationSuccess.d.ts +8 -0
  263. package/lib/pro/Login2.0/steps/VerificationSuccess.js +49 -0
  264. package/lib/pro/Login2.0/steps/VerifyingEmailLink.d.ts +7 -0
  265. package/lib/pro/Login2.0/steps/VerifyingEmailLink.js +41 -0
  266. package/lib/pro/Login2.0/steps/WaitEmailLink.d.ts +18 -0
  267. package/lib/pro/Login2.0/steps/WaitEmailLink.js +67 -0
  268. package/lib/pro/Login2.0/steps/index.d.ts +19 -0
  269. package/lib/pro/Login2.0/steps/index.js +60 -0
  270. package/lib/pro/Login2.0/steps/steps.less +423 -0
  271. package/lib/pro/Login2.0/types.d.ts +167 -0
  272. package/lib/pro/Login2.0/types.js +17 -0
  273. package/lowcode/authmodal/meta.ts +395 -0
  274. package/lowcode/contact-info/fragments/cardStyle.ts +68 -0
  275. package/lowcode/contact-info/fragments/nameStyle.ts +33 -0
  276. package/lowcode/contact-info/fragments/pisellAvatar.ts +103 -0
  277. package/lowcode/contact-info/fragments/textStyle.ts +33 -0
  278. package/lowcode/contact-info/meta.ts +199 -0
  279. package/lowcode/contact-info-modal/meta.ts +98 -0
  280. package/lowcode/login2/CONFIG.md +447 -0
  281. package/lowcode/login2/TEST_CONFIG.md +324 -0
  282. package/lowcode/login2/VERIFICATION_METHODS.md +364 -0
  283. package/lowcode/login2/meta.ts +560 -0
  284. package/lowcode/login2/snippets.ts +124 -0
  285. package/lowcode/register2/meta.ts +562 -0
  286. package/lowcode/register2/snippets.ts +257 -0
  287. package/package.json +7 -5
@@ -0,0 +1,324 @@
1
+ # Login2 测试配置指南
2
+
3
+ ## 快速测试配置
4
+
5
+ ### 1. 分步骤邮箱登录 + Google + Facebook
6
+
7
+ ```json
8
+ {
9
+ "config": {
10
+ "loginMethods": [
11
+ {
12
+ "type": "email",
13
+ "verificationMethods": ["password", "verification_code"],
14
+ "stepByStep": true
15
+ },
16
+ {
17
+ "type": "google",
18
+ "clientId": "your-google-client-id"
19
+ },
20
+ {
21
+ "type": "facebook",
22
+ "appId": "your-facebook-app-id"
23
+ }
24
+ ],
25
+ "ui": {
26
+ "title": {
27
+ "show": true,
28
+ "text": "Welcome to BBPet",
29
+ "align": "center"
30
+ },
31
+ "subtitle": {
32
+ "show": true,
33
+ "text": "Log in to your account",
34
+ "align": "center"
35
+ },
36
+ "desc": {
37
+ "show": true,
38
+ "text": "Welcome back! Please enter your details.",
39
+ "align": "center"
40
+ },
41
+ "themeColor": "#7F56D9"
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ **预期效果:**
48
+ - 第一步:邮箱输入框 + "Continue with email" 按钮
49
+ - 点击后进入第二步:显示邮箱(只读)+ 密码输入框
50
+ - 底部显示:"Email code to xxx" 切换选项
51
+ - OR 分隔符
52
+ - Google 和 Facebook 按钮
53
+
54
+ ### 2. 单步邮箱登录(传统模式)
55
+
56
+ ```json
57
+ {
58
+ "config": {
59
+ "loginMethods": [
60
+ {
61
+ "type": "email",
62
+ "verificationMethods": ["password", "verification_code"],
63
+ "stepByStep": false
64
+ }
65
+ ]
66
+ }
67
+ }
68
+ ```
69
+
70
+ **预期效果:**
71
+ - 邮箱和密码在同一页面
72
+ - Remember me + Forgot password
73
+ - Log in 按钮
74
+ - 底部:"Email code to xxx" 切换选项
75
+
76
+ ### 3. 手机分步骤登录
77
+
78
+ ```json
79
+ {
80
+ "config": {
81
+ "loginMethods": [
82
+ {
83
+ "type": "phone",
84
+ "verificationMethods": ["password"],
85
+ "stepByStep": true
86
+ }
87
+ ]
88
+ }
89
+ }
90
+ ```
91
+
92
+ **预期效果:**
93
+ - 第一步:手机号输入框 + "Continue with phone" 按钮
94
+ - 第二步:手机号(只读)+ 密码输入框 + Log in + Back
95
+
96
+ ### 4. 多种登录方式混合
97
+
98
+ ```json
99
+ {
100
+ "config": {
101
+ "loginMethods": [
102
+ {
103
+ "type": "email",
104
+ "verificationMethods": ["password", "verification_code"],
105
+ "stepByStep": true
106
+ },
107
+ {
108
+ "type": "google",
109
+ "clientId": "xxx"
110
+ },
111
+ {
112
+ "type": "phone",
113
+ "verificationMethods": ["verification_code", "password"],
114
+ "stepByStep": false
115
+ },
116
+ {
117
+ "type": "apple",
118
+ "clientId": "xxx"
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ ```
124
+
125
+ **预期效果:**
126
+ - 主表单:邮箱分步骤登录
127
+ - 底部切换区域:
128
+ - 📧 Email code to xxx
129
+ - 📱 Phone login
130
+ - Google 按钮
131
+ - Apple 按钮
132
+
133
+ ### 5. 纯第三方登录
134
+
135
+ ```json
136
+ {
137
+ "config": {
138
+ "loginMethods": [
139
+ {
140
+ "type": "google",
141
+ "clientId": "xxx"
142
+ },
143
+ {
144
+ "type": "facebook",
145
+ "appId": "xxx"
146
+ },
147
+ {
148
+ "type": "apple",
149
+ "clientId": "xxx"
150
+ }
151
+ ]
152
+ }
153
+ }
154
+ ```
155
+
156
+ **预期效果:**
157
+ - 只显示 Google 按钮(主要)
158
+ - OR 分隔符
159
+ - Facebook 和 Apple 按钮
160
+
161
+ ## 在低代码编辑器中测试
162
+
163
+ ### 步骤 1:拖入组件
164
+
165
+ 1. 从组件库拖入 "登录 2.0(推荐配置)"
166
+ 2. 默认已配置好分步骤邮箱登录
167
+
168
+ ### 步骤 2:修改配置
169
+
170
+ 在右侧属性面板中:
171
+
172
+ 1. **登录方式配置(推荐)** 组
173
+ - 点击 "登录方式列表"
174
+ - 添加/删除/重新排序登录方式
175
+ - 对邮箱/手机登录方式:
176
+ - 勾选 "分步骤登录(密码)" 启用分步骤模式
177
+ - 设置 "验证方式" 数组(第一项为默认)
178
+
179
+ 2. **UI 配置** 组
180
+ - 修改标题、副标题、描述
181
+ - 修改主题色
182
+
183
+ 3. **其他配置** 组
184
+ - 设置 "渠道标识"(可选)
185
+
186
+ ### 步骤 3:绑定事件
187
+
188
+ 在右侧属性面板底部 "事件" 区域:
189
+
190
+ ```javascript
191
+ // onLogin
192
+ function(data, method, channel) {
193
+ console.log('Login:', data, method, channel);
194
+ // data = { account, password, verification_code, remember_me }
195
+ }
196
+
197
+ // onSendVerificationCode
198
+ function(account, type, channel) {
199
+ console.log('Send code to:', account, type, channel);
200
+ }
201
+
202
+ // onOAuthLogin
203
+ function(provider, channel) {
204
+ console.log('OAuth login:', provider, channel);
205
+ }
206
+
207
+ // onForgotPassword
208
+ function(account, channel) {
209
+ console.log('Forgot password:', account, channel);
210
+ }
211
+ ```
212
+
213
+ ### 步骤 4:预览测试
214
+
215
+ 点击 "预览" 按钮,测试以下场景:
216
+
217
+ #### 分步骤登录测试
218
+ 1. 输入邮箱 → 点击 "Continue with email"
219
+ 2. 查看是否进入密码页
220
+ 3. 点击 "Back" 按钮
221
+ 4. 查看是否返回邮箱输入页
222
+
223
+ #### 验证方式切换测试
224
+ 1. 在邮箱密码页,点击底部 "Email code to xxx"
225
+ 2. 查看是否切换到验证码输入模式
226
+ 3. 点击 "Password login" 切换回密码模式
227
+
228
+ #### 登录方式切换测试
229
+ 1. 点击底部 "Phone login"
230
+ 2. 查看是否切换到手机登录表单
231
+ 3. 查看手机登录的默认验证方式是否正确
232
+
233
+ ## 常见问题
234
+
235
+ ### Q1: 分步骤模式不生效?
236
+ **检查:**
237
+ - `stepByStep` 是否设置为 `true`
238
+ - `verificationMethods` 中是否包含 `'password'`
239
+ - 当前是否在密码登录模式(不是验证码模式)
240
+
241
+ ### Q2: 底部切换选项不显示?
242
+ **检查:**
243
+ - `loginMethods` 数组是否有多个项
244
+ - 或邮箱/手机登录方式的 `verificationMethods` 是否有多个
245
+
246
+ ### Q3: 第三方登录按钮不显示?
247
+ **检查:**
248
+ - `type` 是否正确('google'/'facebook'/'apple')
249
+ - 是否在 `loginMethods` 数组中
250
+
251
+ ### Q4: 样式不对?
252
+ **检查:**
253
+ - `ui.themeColor` 是否设置
254
+ - 组件是否正确导入样式文件
255
+
256
+ ## 调试技巧
257
+
258
+ 1. **查看 console.log**
259
+ - 组件内部有多个 `console.log` 用于调试
260
+ - 检查 `normalizedLoginMethods` 输出
261
+ - 检查 `currentLoginMethod` 和 `loginStep` 状态
262
+
263
+ 2. **使用 React DevTools**
264
+ - 查看组件 state
265
+ - 查看 props 传递是否正确
266
+
267
+ 3. **分步测试**
268
+ - 先测试单一登录方式
269
+ - 再测试多种登录方式组合
270
+ - 最后测试分步骤功能
271
+
272
+ ## 配置模板
273
+
274
+ ### 图片中的配置(分步骤邮箱 + 三方)
275
+
276
+ ```json
277
+ {
278
+ "config": {
279
+ "loginMethods": [
280
+ {
281
+ "type": "email",
282
+ "verificationMethods": ["password"],
283
+ "stepByStep": true
284
+ },
285
+ {
286
+ "type": "google",
287
+ "clientId": ""
288
+ },
289
+ {
290
+ "type": "facebook",
291
+ "appId": ""
292
+ },
293
+ {
294
+ "type": "apple",
295
+ "clientId": ""
296
+ }
297
+ ],
298
+ "ui": {
299
+ "logo": {
300
+ "show": true,
301
+ "url": "https://your-logo-url.png",
302
+ "position": "center"
303
+ },
304
+ "title": {
305
+ "show": true,
306
+ "text": "Welcome to BBPet",
307
+ "align": "center"
308
+ },
309
+ "subtitle": {
310
+ "show": true,
311
+ "text": "Log in to your account",
312
+ "align": "center"
313
+ },
314
+ "desc": {
315
+ "show": true,
316
+ "text": "Welcome back! Please enter your details.",
317
+ "align": "center"
318
+ },
319
+ "themeColor": "#7F56D9"
320
+ }
321
+ }
322
+ }
323
+ ```
324
+
@@ -0,0 +1,364 @@
1
+ # Login2 验证方式配置详解
2
+
3
+ ## 概述
4
+
5
+ `verificationMethods` 是 Login2 组件中用于配置邮箱/手机登录验证方式的参数。它决定了用户可以使用哪些方式进行登录,以及这些方式如何显示和切换。
6
+
7
+ ## 基本概念
8
+
9
+ ### 支持的验证方式
10
+
11
+ - `"password"` - 密码登录
12
+ - `"verification_code"` - 验证码登录
13
+
14
+ ### 配置位置
15
+
16
+ ```typescript
17
+ {
18
+ type: 'email', // 或 'phone'
19
+ verificationMethods: ['password', 'verification_code']
20
+ }
21
+ ```
22
+
23
+ ### 配置规则
24
+
25
+ 1. **数组第一项为默认方式**
26
+ - `['password', 'verification_code']` → 默认显示密码登录
27
+ - `['verification_code', 'password']` → 默认显示验证码登录
28
+
29
+ 2. **可以只配置一种方式**
30
+ - `['password']` → 只有密码登录
31
+ - `['verification_code']` → 只有验证码登录
32
+
33
+ 3. **配置多种方式时,用户可以切换**
34
+ - 界面会显示 "OR" 分隔线
35
+ - 分隔线下方显示切换按钮
36
+
37
+ ## 使用场景
38
+
39
+ ### 场景 1:密码为主,验证码为辅
40
+
41
+ **配置:**
42
+ ```json
43
+ {
44
+ "type": "email",
45
+ "verificationMethods": ["password", "verification_code"]
46
+ }
47
+ ```
48
+
49
+ **用户体验:**
50
+ 1. 默认看到密码输入框
51
+ 2. 下方有 "Email code to xxx" 选项
52
+ 3. 忘记密码时可以切换到验证码登录
53
+
54
+ **适用于:** 传统网站、后台管理系统
55
+
56
+ ---
57
+
58
+ ### 场景 2:验证码为主,密码为辅
59
+
60
+ **配置:**
61
+ ```json
62
+ {
63
+ "type": "phone",
64
+ "verificationMethods": ["verification_code", "password"]
65
+ }
66
+ ```
67
+
68
+ **用户体验:**
69
+ 1. 默认看到验证码输入框
70
+ 2. 下方有 "Password login" 选项
71
+ 3. 收不到验证码时可以切换到密码登录
72
+
73
+ **适用于:** 移动端 App、金融类应用
74
+
75
+ ---
76
+
77
+ ### 场景 3:仅密码登录
78
+
79
+ **配置:**
80
+ ```json
81
+ {
82
+ "type": "email",
83
+ "verificationMethods": ["password"]
84
+ }
85
+ ```
86
+
87
+ **用户体验:**
88
+ 1. 只显示密码输入框
89
+ 2. 无其他登录方式切换
90
+ 3. 界面简洁
91
+
92
+ **适用于:** 企业内部系统、不支持短信的场景
93
+
94
+ ---
95
+
96
+ ### 场景 4:仅验证码登录
97
+
98
+ **配置:**
99
+ ```json
100
+ {
101
+ "type": "phone",
102
+ "verificationMethods": ["verification_code"]
103
+ }
104
+ ```
105
+
106
+ **用户体验:**
107
+ 1. 只显示验证码输入框
108
+ 2. 无其他登录方式切换
109
+ 3. 更安全(无需记忆密码)
110
+
111
+ **适用于:** 高安全要求场景、临时访问
112
+
113
+ ## 界面展示详解
114
+
115
+ ### 单一验证方式
116
+
117
+ ```
118
+ ┌─────────────────────────┐
119
+ │ Logo & Title │
120
+ ├─────────────────────────┤
121
+ │ Email Input │
122
+ │ Password Input │
123
+ │ [Remember me] [Forgot?] │
124
+ │ [Log in Button] │
125
+ └─────────────────────────┘
126
+ ```
127
+
128
+ **特点:**
129
+ - ✅ 界面简洁
130
+ - ✅ 无切换选项
131
+ - ✅ 适合单一登录场景
132
+
133
+ ---
134
+
135
+ ### 多种验证方式(密码默认)
136
+
137
+ ```
138
+ ┌─────────────────────────┐
139
+ │ Logo & Title │
140
+ ├─────────────────────────┤
141
+ │ Email Input │
142
+ │ Password Input │
143
+ │ [Remember me] [Forgot?] │
144
+ │ [Log in Button] │
145
+ ├─────────────────────────┤
146
+ │ OR │ ← 分隔线
147
+ ├─────────────────────────┤
148
+ │ 📧 Email code to u***@ │ ← 切换到验证码
149
+ └─────────────────────────┘
150
+ ```
151
+
152
+ **用户操作流程:**
153
+ 1. 输入邮箱
154
+ 2. 输入密码
155
+ 3. 点击登录
156
+ 4. **或** 点击 "Email code to xxx" 切换到验证码模式
157
+
158
+ ---
159
+
160
+ ### 多种验证方式(验证码默认)
161
+
162
+ ```
163
+ ┌─────────────────────────┐
164
+ │ Logo & Title │
165
+ ├─────────────────────────┤
166
+ │ Email Input │
167
+ │ Verification Code Input │
168
+ │ [Send Code Button] │
169
+ │ [Log in Button] │
170
+ ├─────────────────────────┤
171
+ │ OR │ ← 分隔线
172
+ ├─────────────────────────┤
173
+ │ 🔑 Password login │ ← 切换到密码
174
+ └─────────────────────────┘
175
+ ```
176
+
177
+ **用户操作流程:**
178
+ 1. 输入邮箱
179
+ 2. 点击"发送验证码"
180
+ 3. 输入验证码
181
+ 4. 点击登录
182
+ 5. **或** 点击 "Password login" 切换到密码模式
183
+
184
+ ## 技术实现
185
+
186
+ ### 默认验证方式初始化
187
+
188
+ ```typescript
189
+ // Login2.tsx
190
+ useEffect(() => {
191
+ if (loginMethods.length > 0 && !currentLoginMethod) {
192
+ const first = loginMethods[0];
193
+ setCurrentLoginMethod(first);
194
+
195
+ // 设置默认验证方式(数组第一项)
196
+ if (first.type === 'email' || first.type === 'phone') {
197
+ setCurrentVerificationMethod(first.verificationMethods?.[0] || 'password');
198
+ }
199
+ }
200
+ }, [loginMethods, currentLoginMethod]);
201
+ ```
202
+
203
+ ### 验证方式切换
204
+
205
+ ```typescript
206
+ const switchVerificationMethod = useCallback((method: 'password' | 'verification_code') => {
207
+ setCurrentVerificationMethod(method);
208
+ form.resetFields(['password', 'verification_code']);
209
+ }, [form]);
210
+ ```
211
+
212
+ ### 渲染切换选项
213
+
214
+ ```typescript
215
+ const renderSwitchOptions = () => {
216
+ if (!currentLoginMethod) return null;
217
+
218
+ // 获取当前登录方式的其他验证方式
219
+ if (currentLoginMethod.type === 'email' || currentLoginMethod.type === 'phone') {
220
+ const otherMethods = (currentLoginMethod.verificationMethods || []).filter(
221
+ m => m !== currentVerificationMethod
222
+ );
223
+
224
+ // 为每个其他验证方式渲染切换按钮
225
+ otherMethods.forEach(method => {
226
+ if (method === 'verification_code') {
227
+ // 渲染 "Email code to xxx" 按钮
228
+ } else {
229
+ // 渲染 "Password login" 按钮
230
+ }
231
+ });
232
+ }
233
+
234
+ return options;
235
+ };
236
+ ```
237
+
238
+ ## API 调用
239
+
240
+ ### 密码登录
241
+
242
+ ```typescript
243
+ // 邮箱密码
244
+ await registerAndLogin.emailPasswordLogin({
245
+ email: account,
246
+ password: values.password
247
+ });
248
+
249
+ // 手机密码
250
+ await registerAndLogin.phonePasswordLogin({
251
+ phone: account,
252
+ password: values.password
253
+ });
254
+ ```
255
+
256
+ ### 验证码登录
257
+
258
+ ```typescript
259
+ // 发送邮箱验证码
260
+ await registerAndLogin.sendEmailVerificationCode({
261
+ type: 'email',
262
+ target: account,
263
+ purpose: 'login'
264
+ });
265
+
266
+ // 发送手机验证码
267
+ await registerAndLogin.sendSmsLoginCode({
268
+ phone: account
269
+ });
270
+
271
+ // 邮箱验证码登录
272
+ await registerAndLogin.emailCodeLogin({
273
+ email: account,
274
+ code: values.verification_code
275
+ });
276
+
277
+ // 手机验证码登录
278
+ await registerAndLogin.phoneCodeLogin({
279
+ phone: account,
280
+ code: values.verification_code
281
+ });
282
+ ```
283
+
284
+ ## 常见问题
285
+
286
+ ### Q1: 为什么我配置了两种验证方式,但只显示一种?
287
+
288
+ **A:** 检查以下几点:
289
+ 1. `verificationMethods` 数组是否包含两个元素
290
+ 2. 是否在 lowcode 编辑器中正确保存了配置
291
+ 3. 刷新页面重新加载配置
292
+
293
+ ### Q2: 切换验证方式后,之前输入的内容会丢失吗?
294
+
295
+ **A:**
296
+ - ✅ **账号(邮箱/手机号)** - 保留
297
+ - ❌ **密码** - 清空
298
+ - ❌ **验证码** - 清空
299
+
300
+ 这是为了安全考虑,避免用户混淆不同的验证方式。
301
+
302
+ ### Q3: 可以配置三种或更多验证方式吗?
303
+
304
+ **A:** 目前只支持 `password` 和 `verification_code` 两种,不支持配置更多。
305
+
306
+ ### Q4: 验证码有效期是多久?
307
+
308
+ **A:** 这取决于后端 API 的实现,通常为 5-10 分钟。前端组件提供 60 秒的倒计时,防止频繁发送。
309
+
310
+ ### Q5: 可以自定义切换按钮的文案吗?
311
+
312
+ **A:** 目前文案是国际化的,会根据用户的语言自动切换。如需自定义,可以修改 `locales.ts` 文件。
313
+
314
+ ## 最佳实践
315
+
316
+ ### ✅ 推荐配置
317
+
318
+ 1. **移动端优先场景**
319
+ ```json
320
+ ["verification_code", "password"]
321
+ ```
322
+ - 验证码更符合移动用户习惯
323
+ - 密码作为备选方案
324
+
325
+ 2. **桌面端优先场景**
326
+ ```json
327
+ ["password", "verification_code"]
328
+ ```
329
+ - 密码输入更快速
330
+ - 验证码作为忘记密码的替代方案
331
+
332
+ 3. **高安全场景**
333
+ ```json
334
+ ["verification_code"]
335
+ ```
336
+ - 每次都需要验证码
337
+ - 减少密码泄露风险
338
+
339
+ ### ❌ 不推荐配置
340
+
341
+ 1. **空数组**
342
+ ```json
343
+ []
344
+ ```
345
+ - 用户无法登录
346
+
347
+ 2. **无效的验证方式**
348
+ ```json
349
+ ["invalid_method"]
350
+ ```
351
+ - 组件会回退到 `"password"`
352
+
353
+ ## 总结
354
+
355
+ `verificationMethods` 提供了灵活的登录方式配置:
356
+
357
+ - 📋 **配置简单** - 只需一个数组
358
+ - 🔄 **切换流畅** - 用户可以自由切换
359
+ - 🎨 **界面清晰** - OR 分隔线明确区分
360
+ - 🔒 **安全可靠** - 支持多因素认证
361
+ - 🌍 **国际化** - 自动适配多语言
362
+
363
+ 通过合理配置 `verificationMethods`,可以为不同场景提供最佳的登录体验!
364
+