ts-glitter 20.7.3 → 20.7.5

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 (248) hide show
  1. package/jr9x7k3aau.json +1 -0
  2. package/lowcode/Entry.js +1 -1
  3. package/lowcode/Entry.ts +1 -1
  4. package/lowcode/backend-manager/bg-notify.js +2 -0
  5. package/lowcode/backend-manager/bg-notify.ts +2 -0
  6. package/lowcode/backend-manager/bg-widget.js +280 -155
  7. package/lowcode/backend-manager/bg-widget.ts +387 -244
  8. package/lowcode/backend-manager/splitPage.js +27 -52
  9. package/lowcode/backend-manager/splitPage.ts +29 -47
  10. package/lowcode/cms-plugin/app-release.js +63 -13
  11. package/lowcode/cms-plugin/app-release.ts +73 -13
  12. package/lowcode/cms-plugin/auto-fcm-advertise.js +23 -24
  13. package/lowcode/cms-plugin/auto-fcm-advertise.ts +286 -285
  14. package/lowcode/cms-plugin/auto-reply.js +285 -273
  15. package/lowcode/cms-plugin/auto-reply.ts +673 -660
  16. package/lowcode/cms-plugin/module/data.ts +1 -0
  17. package/lowcode/cms-plugin/module/order-setting.js +134 -117
  18. package/lowcode/cms-plugin/module/order-setting.ts +152 -138
  19. package/lowcode/cms-plugin/pos-pages/products-page.js +8 -16
  20. package/lowcode/cms-plugin/pos-pages/products-page.ts +10 -12
  21. package/lowcode/cms-plugin/shopping-order-manager.js +244 -289
  22. package/lowcode/cms-plugin/shopping-order-manager.ts +128 -156
  23. package/lowcode/cms-plugin/shopping-order-return.js +1 -1
  24. package/lowcode/cms-plugin/shopping-order-return.ts +1 -1
  25. package/lowcode/cms-plugin/shopping-product-setting.js +3 -3
  26. package/lowcode/cms-plugin/shopping-product-setting.ts +3 -3
  27. package/lowcode/cms-plugin/shopping-setting-advance.js +3 -28
  28. package/lowcode/cms-plugin/shopping-setting-advance.ts +3 -28
  29. package/lowcode/cms-plugin/stock-history.js +31 -15
  30. package/lowcode/cms-plugin/stock-history.ts +43 -25
  31. package/lowcode/cms-plugin/third-party-google.js +103 -81
  32. package/lowcode/cms-plugin/third-party-google.ts +296 -265
  33. package/lowcode/cms-plugin/user-list.js +166 -113
  34. package/lowcode/cms-plugin/user-list.ts +136 -78
  35. package/lowcode/form-view/e-commerce/path-select.js +100 -87
  36. package/lowcode/form-view/e-commerce/path-select.ts +372 -343
  37. package/lowcode/glitter-base/route/stock.ts +153 -141
  38. package/lowcode/glitterBundle/plugins/editor-elem.js +139 -149
  39. package/lowcode/glitterBundle/plugins/editor-elem.ts +207 -222
  40. package/lowcode/public-components/blogs/list.js +8 -16
  41. package/lowcode/public-components/blogs/list.ts +10 -12
  42. package/lowcode/public-components/product/product-list.js +8 -16
  43. package/lowcode/public-components/product/product-list.ts +10 -12
  44. package/lowcode/public-components/user-manager/um-login.js +270 -267
  45. package/lowcode/public-components/user-manager/um-login.ts +987 -983
  46. package/lowcode/public-models/order-info.js +12 -20
  47. package/lowcode/public-models/order-info.ts +13 -12
  48. package/package.json +1 -1
  49. package/src/Language.js.map +1 -1
  50. package/src/api-public/controllers/ai-chat.js.map +1 -1
  51. package/src/api-public/controllers/ai-points.js.map +1 -1
  52. package/src/api-public/controllers/app-release.js.map +1 -1
  53. package/src/api-public/controllers/article.js.map +1 -1
  54. package/src/api-public/controllers/chat.js.map +1 -1
  55. package/src/api-public/controllers/customer-sessions.js.map +1 -1
  56. package/src/api-public/controllers/delivery.js.map +1 -1
  57. package/src/api-public/controllers/fb-message.js.map +1 -1
  58. package/src/api-public/controllers/fb-service.js.map +1 -1
  59. package/src/api-public/controllers/fcm.js.map +1 -1
  60. package/src/api-public/controllers/graph-api.js.map +1 -1
  61. package/src/api-public/controllers/index.js.map +1 -1
  62. package/src/api-public/controllers/invoice.js.map +1 -1
  63. package/src/api-public/controllers/lambda.js.map +1 -1
  64. package/src/api-public/controllers/line-message.js.map +1 -1
  65. package/src/api-public/controllers/manager.js.map +1 -1
  66. package/src/api-public/controllers/oauth.js.map +1 -1
  67. package/src/api-public/controllers/post.js.map +1 -1
  68. package/src/api-public/controllers/progress.js.map +1 -1
  69. package/src/api-public/controllers/rebate.js.map +1 -1
  70. package/src/api-public/controllers/recommend.js.map +1 -1
  71. package/src/api-public/controllers/reconciliation.js.map +1 -1
  72. package/src/api-public/controllers/shop.js.map +1 -1
  73. package/src/api-public/controllers/shopee.js.map +1 -1
  74. package/src/api-public/controllers/sms-points.js.map +1 -1
  75. package/src/api-public/controllers/sms.js.map +1 -1
  76. package/src/api-public/controllers/smtp.js.map +1 -1
  77. package/src/api-public/controllers/sql_api.js.map +1 -1
  78. package/src/api-public/controllers/stock.js.map +1 -1
  79. package/src/api-public/controllers/track.js.map +1 -1
  80. package/src/api-public/controllers/user.js +1 -1
  81. package/src/api-public/controllers/user.js.map +1 -1
  82. package/src/api-public/controllers/user.ts +1 -1
  83. package/src/api-public/controllers/voucher.js.map +1 -1
  84. package/src/api-public/controllers/wallet.js.map +1 -1
  85. package/src/api-public/models/glitter-finance.js +2 -1
  86. package/src/api-public/models/glitter-finance.js.map +1 -1
  87. package/src/api-public/services/EcInvoice.js.map +1 -1
  88. package/src/api-public/services/ai-pointes.js.map +1 -1
  89. package/src/api-public/services/ai-robot.d.ts +1 -0
  90. package/src/api-public/services/ai-robot.js.map +1 -1
  91. package/src/api-public/services/article.js.map +1 -1
  92. package/src/api-public/services/auto-send-email.js.map +1 -1
  93. package/src/api-public/services/chat.js.map +1 -1
  94. package/src/api-public/services/checkout-event.d.ts +3 -1
  95. package/src/api-public/services/checkout-event.js +7 -4
  96. package/src/api-public/services/checkout-event.js.map +1 -1
  97. package/src/api-public/services/checkout-event.ts +26 -17
  98. package/src/api-public/services/checkout.js.map +1 -1
  99. package/src/api-public/services/custom-code.js.map +1 -1
  100. package/src/api-public/services/customer-sessions.js.map +1 -1
  101. package/src/api-public/services/data-analyze.js +3 -3
  102. package/src/api-public/services/data-analyze.js.map +1 -1
  103. package/src/api-public/services/data-analyze.ts +3 -3
  104. package/src/api-public/services/delivery.js.map +1 -1
  105. package/src/api-public/services/ezpay/tool.d.ts +1 -0
  106. package/src/api-public/services/ezpay/tool.js.map +1 -1
  107. package/src/api-public/services/fake-data-model/fake-order.js.map +1 -1
  108. package/src/api-public/services/fake-data-model/fake-product.js.map +1 -1
  109. package/src/api-public/services/fake-data-model/fake-user.js.map +1 -1
  110. package/src/api-public/services/fb-api.d.ts +1 -0
  111. package/src/api-public/services/fb-api.js.map +1 -1
  112. package/src/api-public/services/fb-message.d.ts +1 -0
  113. package/src/api-public/services/fb-message.js.map +1 -1
  114. package/src/api-public/services/fb-service.js +4 -4
  115. package/src/api-public/services/fb-service.js.map +1 -1
  116. package/src/api-public/services/filter-protect-data.js.map +1 -1
  117. package/src/api-public/services/financial-service.d.ts +1 -0
  118. package/src/api-public/services/financial-service.js.map +1 -1
  119. package/src/api-public/services/form-check.js.map +1 -1
  120. package/src/api-public/services/graph-api.js.map +1 -1
  121. package/src/api-public/services/initial-fake-data.js.map +1 -1
  122. package/src/api-public/services/invoice.js.map +1 -1
  123. package/src/api-public/services/language-setting.js.map +1 -1
  124. package/src/api-public/services/line-message.d.ts +1 -0
  125. package/src/api-public/services/line-message.js.map +1 -1
  126. package/src/api-public/services/mail.js.map +1 -1
  127. package/src/api-public/services/manager.js.map +1 -1
  128. package/src/api-public/services/model/handlePaymentTransaction.js.map +1 -1
  129. package/src/api-public/services/model/shopnex-line-message.js.map +1 -1
  130. package/src/api-public/services/monitor.d.ts +1 -0
  131. package/src/api-public/services/monitor.js.map +1 -1
  132. package/src/api-public/services/notify.js.map +1 -1
  133. package/src/api-public/services/order-event.js.map +1 -1
  134. package/src/api-public/services/paynow-logistics.js.map +1 -1
  135. package/src/api-public/services/phone-verify.js.map +1 -1
  136. package/src/api-public/services/pos.js.map +1 -1
  137. package/src/api-public/services/post.js.map +1 -1
  138. package/src/api-public/services/product-initial.js.map +1 -1
  139. package/src/api-public/services/public-table-check.js.map +1 -1
  140. package/src/api-public/services/rebate.js.map +1 -1
  141. package/src/api-public/services/recommend.js.map +1 -1
  142. package/src/api-public/services/reconciliation.js.map +1 -1
  143. package/src/api-public/services/schedule.js.map +1 -1
  144. package/src/api-public/services/share-permission.d.ts +1 -1
  145. package/src/api-public/services/share-permission.js.map +1 -1
  146. package/src/api-public/services/shopee.d.ts +1 -0
  147. package/src/api-public/services/shopee.js.map +1 -1
  148. package/src/api-public/services/shopping.js +5 -9
  149. package/src/api-public/services/shopping.js.map +1 -1
  150. package/src/api-public/services/shopping.ts +4 -10
  151. package/src/api-public/services/sms-pointes.js.map +1 -1
  152. package/src/api-public/services/sms.js.map +1 -1
  153. package/src/api-public/services/stock.js.map +1 -1
  154. package/src/api-public/services/terms-check.js.map +1 -1
  155. package/src/api-public/services/updated-table-checked.js.map +1 -1
  156. package/src/api-public/services/user-update.js.map +1 -1
  157. package/src/api-public/services/user.d.ts +6 -1
  158. package/src/api-public/services/user.js +30 -15
  159. package/src/api-public/services/user.js.map +1 -1
  160. package/src/api-public/services/user.ts +109 -91
  161. package/src/api-public/services/voucher.js.map +1 -1
  162. package/src/api-public/services/wallet.js.map +1 -1
  163. package/src/api-public/services/workers.js.map +1 -1
  164. package/src/api-public/utils/ut-database.js.map +1 -1
  165. package/src/api-public/utils/ut-permission.d.ts +1 -0
  166. package/src/api-public/utils/ut-permission.js.map +1 -1
  167. package/src/app-project/serverless/src/controllers/index.js.map +1 -1
  168. package/src/app-project/serverless/src/controllers/sample.js.map +1 -1
  169. package/src/app-project/serverless/src/modules/database.d.ts +2 -1
  170. package/src/app-project/serverless/src/modules/database.js.map +1 -1
  171. package/src/app-project/serverless/src/modules/exception.js.map +1 -1
  172. package/src/app-project/serverless/src/modules/hooks.js.map +1 -1
  173. package/src/app-project/serverless/src/modules/logger.js.map +1 -1
  174. package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
  175. package/src/app-project/serverless/src/modules/redis.js.map +1 -1
  176. package/src/app-project/serverless/src/modules/response.js.map +1 -1
  177. package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
  178. package/src/config.d.ts +1 -1
  179. package/src/config.js.map +1 -1
  180. package/src/controllers/ai.js.map +1 -1
  181. package/src/controllers/app.js.map +1 -1
  182. package/src/controllers/backend-server.js.map +1 -1
  183. package/src/controllers/filemanager.js.map +1 -1
  184. package/src/controllers/global-event.js.map +1 -1
  185. package/src/controllers/index.js.map +1 -1
  186. package/src/controllers/page.js.map +1 -1
  187. package/src/controllers/private_config.js.map +1 -1
  188. package/src/controllers/template.js.map +1 -1
  189. package/src/controllers/user.js.map +1 -1
  190. package/src/domain-check.js.map +1 -1
  191. package/src/export/export-test.js.map +1 -1
  192. package/src/firebase/message.js +2 -1
  193. package/src/firebase/message.js.map +1 -1
  194. package/src/helper/app_creater.js +2 -1
  195. package/src/helper/app_creater.js.map +1 -1
  196. package/src/helper/glitter-util.d.ts +1 -0
  197. package/src/helper/glitter-util.js.map +1 -1
  198. package/src/index.js +3 -3
  199. package/src/index.js.map +1 -1
  200. package/src/lambda/interface.d.ts +1 -1
  201. package/src/lambda/interface.js +2 -2
  202. package/src/lambda/interface.js.map +1 -1
  203. package/src/modules/AWSLib.js +3 -2
  204. package/src/modules/AWSLib.js.map +1 -1
  205. package/src/modules/caught-error.js.map +1 -1
  206. package/src/modules/database.d.ts +2 -1
  207. package/src/modules/database.js.map +1 -1
  208. package/src/modules/exception.js.map +1 -1
  209. package/src/modules/firebase.js.map +1 -1
  210. package/src/modules/hooks.js.map +1 -1
  211. package/src/modules/logger.js.map +1 -1
  212. package/src/modules/redis.d.ts +1 -1
  213. package/src/modules/redis.js.map +1 -1
  214. package/src/modules/response.js.map +1 -1
  215. package/src/modules/ssh.js.map +1 -1
  216. package/src/modules/tool.d.ts +4 -4
  217. package/src/modules/tool.js +2 -1
  218. package/src/modules/tool.js.map +1 -1
  219. package/src/public-config-initial/auto-fcm.js.map +1 -1
  220. package/src/run.js +2 -1
  221. package/src/run.js.map +1 -1
  222. package/src/seo-config.d.ts +1 -0
  223. package/src/seo-config.js +3 -3
  224. package/src/seo-config.js.map +1 -1
  225. package/src/services/ai.js.map +1 -1
  226. package/src/services/app.js.map +1 -1
  227. package/src/services/backend-service.js.map +1 -1
  228. package/src/services/create-instance.js +4 -3
  229. package/src/services/create-instance.js.map +1 -1
  230. package/src/services/global-event.js.map +1 -1
  231. package/src/services/ios-release.js.map +1 -1
  232. package/src/services/page.js.map +1 -1
  233. package/src/services/private_config.js.map +1 -1
  234. package/src/services/release.js.map +1 -1
  235. package/src/services/saas-table-check.js +2 -2
  236. package/src/services/saas-table-check.js.map +1 -1
  237. package/src/services/seo.js.map +1 -1
  238. package/src/services/ses.js +2 -1
  239. package/src/services/ses.js.map +1 -1
  240. package/src/services/system-schedule.js.map +1 -1
  241. package/src/services/template.js.map +1 -1
  242. package/src/services/tool.js +3 -2
  243. package/src/services/tool.js.map +1 -1
  244. package/src/services/user.js.map +1 -1
  245. package/src/services/web-socket.js.map +1 -1
  246. package/src/update-progress-track.js.map +1 -1
  247. package/src/update-script.js.map +1 -1
  248. package/src/api-public/services/checkout-service.js +0 -1074
@@ -12,1040 +12,1044 @@ const html = String.raw;
12
12
  const css = String.raw;
13
13
 
14
14
  type VM = {
15
- account: string;
16
- password: string;
17
- loginConfig: any;
18
- registerConfig: any;
19
- resetEmail: string;
20
- viewType: string;
21
- validationCode: string;
22
- prefix: string;
15
+ account: string;
16
+ password: string;
17
+ loginConfig: any;
18
+ registerConfig: any;
19
+ resetEmail: string;
20
+ viewType: string;
21
+ validationCode: string;
22
+ prefix: string;
23
23
  };
24
24
 
25
25
  export class UMLogin {
26
- static main(gvc: GVC, widget: any, subData: any) {
27
- const glitter = gvc.glitter;
28
- const vm: VM = {
29
- account: '',
30
- password: '',
31
- loginConfig: {},
32
- registerConfig: [],
33
- viewType: '',
34
- resetEmail: '',
35
- validationCode: '',
36
- prefix: Tool.randomString(5),
37
- };
38
- UmClass.addStyle(gvc);
39
- this.addStyle(gvc, vm.prefix);
40
-
41
- const ids = {
42
- view: glitter.getUUID(),
43
- };
44
-
45
- const loadings = {
46
- view: true,
47
- };
48
-
49
- const gClass = (name: string) => `${vm.prefix}-${name}`;
50
-
51
- return gvc.bindView({
52
- bind: ids.view,
53
- dataList: [{ obj: vm, key: 'viewType' }],
54
- view: () => {
55
- try {
56
- if (loadings.view) {
57
- return UmClass.spinner();
58
- }
59
-
60
- if (vm.viewType === 'send_forget_pwd_email') {
61
- return html`<section class="${gClass('container')}">
62
- <div class="${gClass('box')}">
63
- <div class="${gClass('login-title')}">${Language.text('forgot_password')}</div>
64
- <div class="w-100 d-flex flex-column gap-3">
65
- <div>
66
- <label class="${gClass('label')}">${Language.text('email')}</label>
67
- <input class="bgw-input" type="text" id="vm-email" placeholder="${Language.text('email_placeholder')}" />
68
- </div>
69
- <div
70
- class="${gClass('button')} my-2"
71
- onclick="${gvc.event(() => {
72
- this.sendResetEmail(widget, vm);
73
- })}"
74
- >
75
- <span class="${gClass('button-text')}">${Language.text('get_verification_code')}</span>
76
- </div>
77
- </div>
78
- ${this.backToLogin(gvc, vm)}
79
- </div>
80
- </section>`;
81
- }
82
-
83
- if (vm.viewType === 'validation_code') {
84
- return html`<section class="${gClass('container')}">
85
- <div class="${gClass('box')}">
86
- <div class="${gClass('login-title')}">${Language.text('enter_verification_code')}</div>
87
- <div class="w-100 d-flex flex-column gap-3">
88
- <div>
89
- <label class="${gClass('label')}">${Language.text('verification_code')}</label>
90
- <input class="bgw-input" type="text" id="vm-code" placeholder="${Language.text('please_enter_verification_code')}" />
91
- </div>
92
- ${this.sendCodeAgain(gvc, vm.prefix, () => {
93
- this.sendResetEmail(widget, vm);
94
- })}
95
- <div
96
- class="${gClass('button')} my-2"
97
- onclick="${gvc.event(() => {
98
- this.verifySubmitCode(widget, vm);
99
- })}"
100
- >
101
- <span class="${gClass('button-text')}">${Language.text('submit')}</span>
102
- </div>
103
- </div>
104
- ${this.backToLogin(gvc, vm)}
26
+ static main(gvc: GVC, widget: any, subData: any) {
27
+ const glitter = gvc.glitter;
28
+ const vm: VM = {
29
+ account: '',
30
+ password: '',
31
+ loginConfig: {},
32
+ registerConfig: [],
33
+ viewType: '',
34
+ resetEmail: '',
35
+ validationCode: '',
36
+ prefix: Tool.randomString(5),
37
+ };
38
+ UmClass.addStyle(gvc);
39
+ this.addStyle(gvc, vm.prefix);
40
+
41
+ const ids = {
42
+ view: glitter.getUUID(),
43
+ };
44
+
45
+ const loadings = {
46
+ view: true,
47
+ };
48
+
49
+ const gClass = (name: string) => `${vm.prefix}-${name}`;
50
+
51
+ return gvc.bindView({
52
+ bind: ids.view,
53
+ dataList: [{ obj: vm, key: 'viewType' }],
54
+ view: () => {
55
+ try {
56
+ if (loadings.view) {
57
+ return UmClass.spinner();
58
+ }
59
+
60
+ if (vm.viewType === 'send_forget_pwd_email') {
61
+ return html`<section class="${gClass('container')}">
62
+ <div class="${gClass('box')}">
63
+ <div class="${gClass('login-title')}">${Language.text('forgot_password')}</div>
64
+ <div class="w-100 d-flex flex-column gap-3">
65
+ <div>
66
+ <label class="${gClass('label')}">${Language.text('email')}</label>
67
+ <input class="bgw-input" type="text" id="vm-email" placeholder="${Language.text('email_placeholder')}" />
68
+ </div>
69
+ <div
70
+ class="${gClass('button')} my-2"
71
+ onclick="${gvc.event(() => {
72
+ this.sendResetEmail(widget, vm);
73
+ })}"
74
+ >
75
+ <span class="${gClass('button-text')}">${Language.text('get_verification_code')}</span>
76
+ </div>
77
+ </div>
78
+ ${this.backToLogin(gvc, vm)}
79
+ </div>
80
+ </section>`;
81
+ }
82
+
83
+ if (vm.viewType === 'validation_code') {
84
+ return html`<section class="${gClass('container')}">
85
+ <div class="${gClass('box')}">
86
+ <div class="${gClass('login-title')}">${Language.text('enter_verification_code')}</div>
87
+ <div class="w-100 d-flex flex-column gap-3">
88
+ <div>
89
+ <label class="${gClass('label')}">${Language.text('verification_code')}</label>
90
+ <input class="bgw-input" type="text" id="vm-code" placeholder="${Language.text('please_enter_verification_code')}" />
91
+ </div>
92
+ ${this.sendCodeAgain(gvc, vm.prefix, () => {
93
+ this.sendResetEmail(widget, vm);
94
+ })}
95
+ <div
96
+ class="${gClass('button')} my-2"
97
+ onclick="${gvc.event(() => {
98
+ this.verifySubmitCode(widget, vm);
99
+ })}"
100
+ >
101
+ <span class="${gClass('button-text')}">${Language.text('submit')}</span>
102
+ </div>
103
+ </div>
104
+ ${this.backToLogin(gvc, vm)}
105
+ </div>
106
+ </section>`;
107
+ }
108
+
109
+ if (vm.viewType === 'reset_password') {
110
+ return html`<section class="${gClass('container')}">
111
+ <div class="${gClass('box')}">
112
+ <div class="${gClass('login-title')}">${Language.text('reset_password')}</div>
113
+ <div class="w-100 d-flex flex-column gap-3">
114
+ <div>
115
+ <label class="${gClass('label')}">${Language.text('new_password')}</label>
116
+ <input class="bgw-input" type="password" id="vm-new-password" placeholder="${Language.text('new_password_placeholder')}" />
117
+ </div>
118
+ <div>
119
+ <label class="${gClass('label')}">${Language.text('confirm_password')}</label>
120
+ <input class="bgw-input" type="password" id="vm-confirm-password" placeholder="${Language.text('please_enter_password_again')}" />
121
+ </div>
122
+ <div
123
+ class="${gClass('button')} my-2"
124
+ onclick="${gvc.event(() => {
125
+ this.resetNewPassword(widget, vm);
126
+ })}"
127
+ >
128
+ <span class="${gClass('button-text')}">${Language.text('submit')}</span>
129
+ </div>
130
+ </div>
131
+ ${this.backToLogin(gvc, vm)}
132
+ </div>
133
+ </section>`;
134
+ }
135
+
136
+ if (vm.viewType === 'register') {
137
+ return html`<section class="${gClass('container')}">
138
+ <div class="${gClass('box')}">
139
+ <div class="${gClass('login-title')}">${Language.text('member_register')}</div>
140
+ <div class="w-100 d-flex flex-column gap-3">
141
+ ${vm.registerConfig
142
+ .map((item: any) => {
143
+ if (item.hidden) return '';
144
+ const title = ['name', 'email', 'phone', 'birth'].includes(item.key) ? Language.text(`form_${item.key}`) : item.title;
145
+ const placeholder = Language.text(`please_enter_${item.key}`) || item.form_config.place_holder || '';
146
+ const cell = html`<div class="position-relative">
147
+ <label class="${gClass('label')}">${title}</label>
148
+ <input
149
+ class="bgw-input"
150
+ type="${item.form_config.type}"
151
+ id="reg-${item.key}"
152
+ ${(item.form_config.type==='date') ? ``:` placeholder="${placeholder}"
153
+ data-placeholder="${placeholder}"`}
154
+ onchange="${gvc.event((e) => {
155
+ if (CheckInput.isEmpty(e.value)) {
156
+ e.style.color = 'rgba(0,0,0,0)';
157
+ e.dataset.placeholder = placeholder;
158
+ } else {
159
+ e.style.color = '#393939';
160
+ e.dataset.placeholder = '';
161
+ }
162
+ })}"
163
+ />
164
+ </div>`;
165
+
166
+ if (item.key === 'email' && vm.loginConfig.email_verify) {
167
+ return html`${cell}
168
+ <div>
169
+ <label class="${gClass('label')}">${Language.text('email_verification_code')}</label>
170
+ <input class="bgw-input" type="text" id="reg-${item.key}-verify" placeholder="${Language.text('please_enter_verification_code')}" />
105
171
  </div>
106
- </section>`;
107
- }
108
-
109
- if (vm.viewType === 'reset_password') {
110
- return html`<section class="${gClass('container')}">
111
- <div class="${gClass('box')}">
112
- <div class="${gClass('login-title')}">${Language.text('reset_password')}</div>
113
- <div class="w-100 d-flex flex-column gap-3">
114
- <div>
115
- <label class="${gClass('label')}">${Language.text('new_password')}</label>
116
- <input class="bgw-input" type="password" id="vm-new-password" placeholder="${Language.text('new_password_placeholder')}" />
117
- </div>
118
- <div>
119
- <label class="${gClass('label')}">${Language.text('confirm_password')}</label>
120
- <input class="bgw-input" type="password" id="vm-confirm-password" placeholder="${Language.text('please_enter_password_again')}" />
121
- </div>
122
- <div
123
- class="${gClass('button')} my-2"
124
- onclick="${gvc.event(() => {
125
- this.resetNewPassword(widget, vm);
126
- })}"
127
- >
128
- <span class="${gClass('button-text')}">${Language.text('submit')}</span>
129
- </div>
130
- </div>
131
- ${this.backToLogin(gvc, vm)}
172
+ ${this.sendCodeAgain(gvc, vm.prefix, () => {
173
+ this.sendVerifyEmailCode(widget, `reg-${item.key}`);
174
+ })}`;
175
+ }
176
+
177
+ if (item.key === 'phone' && vm.loginConfig.phone_verify) {
178
+ return html`${cell}
179
+ <div>
180
+ <label class="${gClass('label')}">${Language.text('sms_verification_code')}</label>
181
+ <input class="bgw-input" type="text" id="reg-${item.key}-verify" placeholder="${Language.text('please_enter_verification_code')}" />
132
182
  </div>
133
- </section>`;
134
- }
183
+ ${this.sendCodeAgain(gvc, vm.prefix, () => {
135
184
 
136
- if (vm.viewType === 'register') {
137
- return html`<section class="${gClass('container')}">
138
- <div class="${gClass('box')}">
139
- <div class="${gClass('login-title')}">${Language.text('member_register')}</div>
140
- <div class="w-100 d-flex flex-column gap-3">
141
- ${vm.registerConfig
142
- .map((item: any) => {
143
- if (item.hidden) return '';
144
- const title = ['name', 'email', 'phone', 'birth'].includes(item.key) ? Language.text(`form_${item.key}`) : item.title;
145
- const placeholder = Language.text(`please_enter_${item.key}`) || item.form_config.place_holder || '';
146
- const cell = html`<div class="position-relative">
147
- <label class="${gClass('label')}">${title}</label>
148
- <input
149
- class="bgw-input"
150
- type="${item.form_config.type}"
151
- id="reg-${item.key}"
152
- ${(item.form_config.type==='date') ? ``:` placeholder="${placeholder}"
153
- data-placeholder="${placeholder}"`}
154
- onchange="${gvc.event((e) => {
155
- if (CheckInput.isEmpty(e.value)) {
156
- e.style.color = 'rgba(0,0,0,0)';
157
- e.dataset.placeholder = placeholder;
158
- } else {
159
- e.style.color = '#393939';
160
- e.dataset.placeholder = '';
161
- }
162
- })}"
163
- />
164
- </div>`;
165
-
166
- if (item.key === 'email' && vm.loginConfig.email_verify) {
167
- return html`${cell}
168
- <div>
169
- <label class="${gClass('label')}">${Language.text('email_verification_code')}</label>
170
- <input class="bgw-input" type="text" id="reg-${item.key}-verify" placeholder="${Language.text('please_enter_verification_code')}" />
171
- </div>
172
- ${this.sendCodeAgain(gvc, vm.prefix, () => {
173
- this.sendVerifyEmailCode(widget, `reg-${item.key}`);
174
- })}`;
175
- }
176
-
177
- if (item.key === 'phone' && vm.loginConfig.phone_verify) {
178
- return html`${cell}
179
- <div>
180
- <label class="${gClass('label')}">${Language.text('sms_verification_code')}</label>
181
- <input class="bgw-input" type="text" id="reg-${item.key}-verify" placeholder="${Language.text('please_enter_verification_code')}" />
182
- </div>
183
- ${this.sendCodeAgain(gvc, vm.prefix, () => {
184
-
185
- this.sendVerifyPhoneCode(widget, `reg-${item.key}`);
186
- })}`;
187
- }
188
-
189
- return cell;
190
- })
191
- .join('')}
192
- <div>
193
- <label class="${gClass('label')}">${Language.text('password')}</label>
194
- <input class="bgw-input" type="password" id="vm-password" placeholder="${Language.text('please_enter_password')}" />
195
- </div>
196
- <div>
197
- <label class="${gClass('label')}">${Language.text('confirm_password')}</label>
198
- <input class="bgw-input" type="password" id="vm-confirm-password" placeholder="${Language.text('please_enter_password_again')}" />
199
- </div>
200
- <div
201
- class="${gClass('button')} my-2"
202
- onclick="${gvc.event(() => {
203
- this.registerByNormal(gvc, widget, vm);
204
- })}"
205
- >
206
- <span class="${gClass('button-text')}">${Language.text('register')}</span>
207
- </div>
208
- ${this.authThirdPartyHTML(gvc, widget, vm)}
209
- <div class="d-flex flex-column gap-2 text-center mt-1">
210
- <div class="${gClass('font-16')}">
211
- ${Language.text('member_exists_prompt')}<span
212
- class="${gClass('blue-note')}"
213
- onclick="${gvc.event(() => {
214
- this.viewCallback(vm, '');
215
- })}"
216
- >${Language.text('login')}</span
217
- >
218
- </div>
219
- <div class="${gClass('font-14')}">
220
- ${Language.text('registration_terms_agreement')}<a class="${gClass('blue-note')}" href="/privacy">${Language.text('terms_of_service')}</a>${Language.text(
221
- 'and'
222
- )}<a class="${gClass('blue-note')}" href="/term">${Language.text('privacy_policy')}</a>
223
- </div>
224
- </div>
225
- </div>
226
- </div>
227
- </section>`;
228
- }
185
+ this.sendVerifyPhoneCode(widget, `reg-${item.key}`);
186
+ })}`;
187
+ }
229
188
 
230
- return html`<section class="${gClass('container')}">
231
- <div class="${gClass('box')}">
232
- <div class="${gClass('login-title')}">${Language.text('member_login')}</div>
233
- <div class="w-100 d-flex flex-column gap-3">
234
- <div>
235
- <label class="${gClass('label')}">${Language.text('email_phone')}</label>
236
- <input class="bgw-input" type="text" id="vm-account" placeholder="${Language.text('email_phone_placeholder')}" />
237
- </div>
238
- <div>
239
- <label class="${gClass('label')}">${Language.text('password')}</label>
240
- <input class="bgw-input" type="password" id="vm-password" placeholder="${Language.text('please_enter_password')}" />
241
- </div>
242
- <div class="text-end">
243
- <span
244
- class="${gClass('blue-note')}"
245
- onclick="${gvc.event(() => {
246
- vm.viewType = 'send_forget_pwd_email';
189
+ return cell;
190
+ })
191
+ .join('')}
192
+ <div>
193
+ <label class="${gClass('label')}">${Language.text('password')}</label>
194
+ <input class="bgw-input" type="password" id="vm-password" placeholder="${Language.text('please_enter_password')}" />
195
+ </div>
196
+ <div>
197
+ <label class="${gClass('label')}">${Language.text('confirm_password')}</label>
198
+ <input class="bgw-input" type="password" id="vm-confirm-password" placeholder="${Language.text('please_enter_password_again')}" />
199
+ </div>
200
+ <div
201
+ class="${gClass('button')} my-2"
202
+ onclick="${gvc.event(() => {
203
+ this.registerByNormal(gvc, widget, vm);
247
204
  })}"
248
- >${Language.text('forgot_password')}</span
205
+ >
206
+ <span class="${gClass('button-text')}">${Language.text('register')}</span>
207
+ </div>
208
+ ${this.authThirdPartyHTML(gvc, widget, vm)}
209
+ <div class="d-flex flex-column gap-2 text-center mt-1">
210
+ <div class="${gClass('font-16')}">
211
+ ${Language.text('member_exists_prompt')}<span
212
+ class="${gClass('blue-note')}"
213
+ onclick="${gvc.event(() => {
214
+ this.viewCallback(vm, '');
215
+ })}"
216
+ >${Language.text('login')}</span
217
+ >
218
+ </div>
219
+ <div class="${gClass('font-14')}">
220
+ ${Language.text('registration_terms_agreement')}<a class="${gClass('blue-note')}" href="/privacy">${Language.text('terms_of_service')}</a>${Language.text(
221
+ 'and'
222
+ )}<a class="${gClass('blue-note')}" href="/term">${Language.text('privacy_policy')}</a>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </section>`;
228
+ }
229
+
230
+ return html`<section class="${gClass('container')}">
231
+ <div class="${gClass('box')}">
232
+ <div class="${gClass('login-title')}">${Language.text('member_login')}</div>
233
+ <div class="w-100 d-flex flex-column gap-3">
234
+ <div>
235
+ <label class="${gClass('label')}">${Language.text('email_phone')}</label>
236
+ <input class="bgw-input" type="text" id="vm-account" placeholder="${Language.text('email_phone_placeholder')}" />
237
+ </div>
238
+ <div>
239
+ <label class="${gClass('label')}">${Language.text('password')}</label>
240
+ <input class="bgw-input" type="password" id="vm-password" placeholder="${Language.text('please_enter_password')}" />
241
+ </div>
242
+ <div class="text-end">
243
+ <span
244
+ class="${gClass('blue-note')}"
245
+ onclick="${gvc.event(() => {
246
+ vm.viewType = 'send_forget_pwd_email';
247
+ })}"
248
+ >${Language.text('forgot_password')}</span
249
249
  >
250
- </div>
251
- <div
252
- class="${gClass('button')} my-2"
253
- onclick="${gvc.event(() => {
254
- this.loginByNormal(gvc, widget);
255
- })}"
256
- >
257
- <span class="${gClass('button-text')}">${Language.text('login')}</span>
258
- </div>
259
- ${this.authThirdPartyHTML(gvc, widget, vm)}
260
- <div class="d-flex flex-column gap-2 text-center mt-1">
261
- <div class="${gClass('font-16')}">
262
- ${Language.text('member_not_exists_prompt')}<span
263
- class="${gClass('blue-note')}"
264
- onclick="${gvc.event(() => {
265
- this.viewCallback(vm, 'register');
250
+ </div>
251
+ <div
252
+ class="${gClass('button')} my-2"
253
+ onclick="${gvc.event(() => {
254
+ this.loginByNormal(gvc, widget);
255
+ })}"
256
+ >
257
+ <span class="${gClass('button-text')}">${Language.text('login')}</span>
258
+ </div>
259
+ ${this.authThirdPartyHTML(gvc, widget, vm)}
260
+ <div class="d-flex flex-column gap-2 text-center mt-1">
261
+ <div class="${gClass('font-16')}">
262
+ ${Language.text('member_not_exists_prompt')}<span
263
+ class="${gClass('blue-note')}"
264
+ onclick="${gvc.event(() => {
265
+ this.viewCallback(vm, 'register');
266
266
  })}"
267
- >${Language.text('register')}</span
268
- >
269
- </div>
270
- <div class="${gClass('font-14')}">
271
- ${Language.text('login_terms_agreement')}<a class="${gClass('blue-note')}" href="/privacy">${Language.text('terms_of_service')}</a>${Language.text('and')}<a
272
- class="${gClass('blue-note')}"
273
- href="/term"
274
- >${Language.text('privacy_policy')}</a
275
- >
276
- </div>
277
- </div>
278
- </div>
279
- </div>
280
- </section>`;
281
- }catch (e) {
282
- console.log(`error==>`,e)
283
- return ``
284
- }
267
+ >${Language.text('register')}</span
268
+ >
269
+ </div>
270
+ <div class="${gClass('font-14')}">
271
+ ${Language.text('login_terms_agreement')}<a class="${gClass('blue-note')}" href="/privacy">${Language.text('terms_of_service')}</a>${Language.text('and')}<a
272
+ class="${gClass('blue-note')}"
273
+ href="/term"
274
+ >${Language.text('privacy_policy')}</a
275
+ >
276
+ </div>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ </section>`;
281
+ }catch (e) {
282
+ console.log(`error==>`,e)
283
+ return ``
284
+ }
285
285
 
286
- },
287
- divCreate: {},
288
- onCreate: () => {
289
- if (loadings.view) {
290
- Promise.all([
291
- new Promise((resolve, reject) => {
292
- ApiUser.getPublicConfig('login_config', 'manager').then((dd) => {
293
- if (dd.result && dd.response.value) {
294
- resolve(dd.response.value);
295
- } else {
296
- resolve({});
297
- }
298
- });
299
- }),
300
- new Promise((resolve, reject) => {
301
- ApiUser.getPublicConfig('custom_form_register', 'manager').then((dd) => {
302
- try {
303
- resolve(dd.response.value.list || []);
304
- } catch (e) {
305
- resolve([]);
306
- }
307
- });
308
- }),
309
- ]).then((dataArray) => {
310
- vm.loginConfig = dataArray[0];
311
- vm.registerConfig = FormCheck.initialRegisterForm((dataArray[1] as any));
312
- setTimeout(() => {
313
- loadings.view = false;
314
- gvc.notifyDataChange(ids.view);
315
- }, 300);
316
- });
286
+ },
287
+ divCreate: {},
288
+ onCreate: () => {
289
+ if (loadings.view) {
290
+ Promise.all([
291
+ new Promise((resolve, reject) => {
292
+ ApiUser.getPublicConfig('login_config', 'manager').then((dd) => {
293
+ if (dd.result && dd.response.value) {
294
+ resolve(dd.response.value);
295
+ } else {
296
+ resolve({});
317
297
  }
318
- },
319
- });
320
- }
321
-
322
- static addStyle(gvc: GVC, prefix: string) {
323
- const isPhone = document.body.clientWidth < 768;
324
- gvc.addStyle(css`
325
- .${prefix}-container {
326
- box-sizing: border-box;
327
- display: flex;
328
- align-items: center;
329
- justify-content: center;
330
- padding-top: ${isPhone ? 0 : '100px'};
331
- padding-bottom: ${isPhone ? '0px' : '230px'};
332
- overflow: hidden;
333
- }
334
- .${prefix}-box {
335
- border-radius: ${isPhone ? '0px' : '30px'};
336
- background: #fff;
337
- ${isPhone ? '' : 'box-shadow: 5px 5px 20px 0px rgba(0, 0, 0, 0.15)'};
338
- display: flex;
339
- width: 576px;
340
- padding: ${isPhone ? '56px 16px' : '56px'};
341
- flex-direction: column;
342
- justify-content: center;
343
- align-items: center;
344
- gap: 32px;
345
- overflow: hidden;
346
- }
347
- .${prefix}-login-title {
348
- color: #393939;
349
- text-align: center;
350
- font-size: 32px;
351
- font-style: normal;
352
- font-weight: 700;
353
- line-height: 140%;
354
- margin-bottom: 24px;
355
- }
356
- .${prefix}-label {
357
- color: #393939;
358
- font-size: 16px;
359
- font-weight: 500;
360
- margin-bottom: 6px;
361
- }
362
- .${prefix}-button {
363
- border-radius: 10px;
364
- background: #393939;
365
- display: flex;
366
- justify-content: center;
367
- align-items: center;
368
- cursor: pointer;
369
- padding: 14px 0;
370
- cursor: pointer;
371
- height: 48px;
372
- }
373
- .${prefix}-button:hover {
374
- background: #656565;
375
- }
376
- .${prefix}-button-text {
377
- color: #fff;
378
- text-align: center;
379
- font-size: 16px;
380
- font-weight: 700;
381
- letter-spacing: 0.64px;
382
- }
383
- .${prefix}-auth-thrid-button {
384
- border-radius: 5px;
385
- background: #f1f1f1;
386
- height: 50px;
387
- flex: 1;
388
- display: flex;
389
- align-items: center;
390
- justify-content: center;
391
- cursor: pointer;
392
- }
393
- .${prefix}-auth-thrid-button:hover {
394
- background: #dbdbdb;
395
- }
396
- .${prefix}-blue-note {
397
- color: #4d86db;
398
- cursor: pointer;
399
- margin: 0 4px;
400
- }
401
- .${prefix}-blue-note:hover {
402
- color: #4d86db !important;
403
- }
404
- .${prefix}-gray-hr {
405
- flex: 1 1 auto !important;
406
- height: 1px;
407
- background-color: #ddd;
408
- }
409
- .${prefix}-font-16 {
410
- font-size: 16px;
411
- }
412
- .${prefix}-font-14 {
413
- font-size: 14px;
414
- }
415
- `);
416
- }
417
-
418
- static successCallback(gvc: GVC, widget: any, response: any, text?: string) {
419
- gvc.glitter.share.public_api = gvc.glitter.share.public_api ?? {};
420
- gvc.glitter.share.public_api.GlobalUser = GlobalUser;
421
- GlobalUser.token = response.token;
422
- GlobalUser.userInfo = response;
423
-
424
- GlobalUser.updateUserData = JSON.parse(JSON.stringify(response));
425
- widget.event('success', { title: text ?? Language.text('login_success') });
426
- setTimeout(() => {
427
- ApiUser.getUserData(GlobalUser.token, 'me').then(res => {
428
- if (res.response.userData && !res.response.userData.phone && (window as any).login_config.phone_verify && gvc.glitter.getUrlParameter('page')!=='account_edit') {
429
- const dialog=new ShareDialog(gvc.glitter);
430
- dialog.infoMessage({
431
- text:Language.text('phone_verify_check')
432
- });
433
- gvc.glitter.href='/account_edit'
434
- }else{
435
- if( GlobalUser.loginRedirect){
436
- const red=GlobalUser.loginRedirect
437
- GlobalUser.loginRedirect='';
438
- gvc.glitter.href = red;
439
- }else {
440
- //蔡先生的Proshake頁面,沒時間先這樣改
441
- if((window as any).appName==='proshake_v2'){
442
- gvc.glitter.href = '/user_info';
443
- }else{
444
- gvc.glitter.href = '/account_userinfo';
445
- }
446
-
447
- }
298
+ });
299
+ }),
300
+ new Promise((resolve, reject) => {
301
+ ApiUser.getPublicConfig('custom_form_register', 'manager').then((dd) => {
302
+ try {
303
+ resolve(dd.response.value.list || []);
304
+ } catch (e) {
305
+ resolve([]);
448
306
  }
449
- });
450
-
451
- }, 700);
452
- }
453
-
454
- static authThirdPartyHTML(gvc: GVC, widget: any, vm: VM) {
455
- const loginEvents = this.getAuthLoginEvents(gvc, widget);
456
-
457
- return html`<div class="w-100 d-flex align-items-center gap-2" style="color:#8D8D8D;">
458
- <div class="${vm.prefix}-gray-hr"></div>
459
- ${Language.text('or')}
460
- <div class="${vm.prefix}-gray-hr"></div>
461
- </div>
462
- <div class="d-flex w-100 align-items-center justify-content-center gap-2">
463
- ${[
464
- {
465
- type: 'google',
466
- icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/Google__G__logo.svg.webp',
467
- },
468
- {
469
- type: 'line',
470
- icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/LINE_Brand_icon.png',
471
- },
472
- {
473
- type: 'apple',
474
- icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/14776639.png',
475
- },
476
- {
477
- type: 'fb',
478
- icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/5968764.png',
479
- },
480
- ]
481
- .map((item) => {
482
- if (!vm.loginConfig[item.type]) {
483
- return '';
484
- }
485
-
486
- const event = loginEvents.find((data) => data.key === item.type);
487
- if (!event) {
488
- return '';
489
- }
490
- event.created();
491
-
492
- return html`<div
493
- class="${vm.prefix}-auth-thrid-button"
494
- onclick="${gvc.event(() => {
495
- event.call();
496
- })}"
497
- >
498
- <img style="width: 28px" src="${item.icon}" />
499
- </div>`;
500
- })
501
- .join('')}
502
- </div>`;
503
- }
504
-
505
- static checkValue(name: string): string | false {
506
- const e = document.getElementById(name) as HTMLInputElement;
507
- return e && e.value ? e.value : false;
508
- }
509
-
510
- static viewCallback(vm: VM, type: string): void {
511
- setTimeout(() => {
512
- $('html').scrollTop(0);
513
- }, 100);
514
- vm.viewType = type;
515
- }
307
+ });
308
+ }),
309
+ ]).then((dataArray) => {
310
+ vm.loginConfig = dataArray[0];
311
+ vm.registerConfig = FormCheck.initialRegisterForm((dataArray[1] as any));
312
+ setTimeout(() => {
313
+ loadings.view = false;
314
+ gvc.notifyDataChange(ids.view);
315
+ }, 300);
316
+ });
317
+ }
318
+ },
319
+ });
320
+ }
321
+
322
+ static addStyle(gvc: GVC, prefix: string) {
323
+ const isPhone = document.body.clientWidth < 768;
324
+ gvc.addStyle(css`
325
+ .${prefix}-container {
326
+ box-sizing: border-box;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ padding-top: ${isPhone ? 0 : '100px'};
331
+ padding-bottom: ${isPhone ? '0px' : '230px'};
332
+ overflow: hidden;
333
+ }
334
+ .${prefix}-box {
335
+ border-radius: ${isPhone ? '0px' : '30px'};
336
+ background: #fff;
337
+ ${isPhone ? '' : 'box-shadow: 5px 5px 20px 0px rgba(0, 0, 0, 0.15)'};
338
+ display: flex;
339
+ width: 576px;
340
+ padding: ${isPhone ? '56px 16px' : '56px'};
341
+ flex-direction: column;
342
+ justify-content: center;
343
+ align-items: center;
344
+ gap: 32px;
345
+ overflow: hidden;
346
+ }
347
+ .${prefix}-login-title {
348
+ color: #393939;
349
+ text-align: center;
350
+ font-size: 32px;
351
+ font-style: normal;
352
+ font-weight: 700;
353
+ line-height: 140%;
354
+ margin-bottom: 24px;
355
+ }
356
+ .${prefix}-label {
357
+ color: #393939;
358
+ font-size: 16px;
359
+ font-weight: 500;
360
+ margin-bottom: 6px;
361
+ }
362
+ .${prefix}-button {
363
+ border-radius: 10px;
364
+ background: #393939;
365
+ display: flex;
366
+ justify-content: center;
367
+ align-items: center;
368
+ cursor: pointer;
369
+ padding: 14px 0;
370
+ cursor: pointer;
371
+ height: 48px;
372
+ }
373
+ .${prefix}-button:hover {
374
+ background: #656565;
375
+ }
376
+ .${prefix}-button-text {
377
+ color: #fff;
378
+ text-align: center;
379
+ font-size: 16px;
380
+ font-weight: 700;
381
+ letter-spacing: 0.64px;
382
+ }
383
+ .${prefix}-auth-thrid-button {
384
+ border-radius: 5px;
385
+ background: #f1f1f1;
386
+ height: 50px;
387
+ flex: 1;
388
+ display: flex;
389
+ align-items: center;
390
+ justify-content: center;
391
+ cursor: pointer;
392
+ }
393
+ .${prefix}-auth-thrid-button:hover {
394
+ background: #dbdbdb;
395
+ }
396
+ .${prefix}-blue-note {
397
+ color: #4d86db;
398
+ cursor: pointer;
399
+ margin: 0 4px;
400
+ }
401
+ .${prefix}-blue-note:hover {
402
+ color: #4d86db !important;
403
+ }
404
+ .${prefix}-gray-hr {
405
+ flex: 1 1 auto !important;
406
+ height: 1px;
407
+ background-color: #ddd;
408
+ }
409
+ .${prefix}-font-16 {
410
+ font-size: 16px;
411
+ }
412
+ .${prefix}-font-14 {
413
+ font-size: 14px;
414
+ }
415
+ `);
416
+ }
417
+
418
+ static successCallback(gvc: GVC, widget: any, response: any, text?: string) {
419
+ gvc.glitter.share.public_api = gvc.glitter.share.public_api ?? {};
420
+ gvc.glitter.share.public_api.GlobalUser = GlobalUser;
421
+ GlobalUser.token = response.token;
422
+ GlobalUser.userInfo = response;
423
+
424
+ GlobalUser.updateUserData = JSON.parse(JSON.stringify(response));
425
+ widget.event('success', { title: text ?? Language.text('login_success') });
426
+ setTimeout(() => {
427
+ ApiUser.getUserData(GlobalUser.token, 'me').then(res => {
428
+ if (res.response.userData && !res.response.userData.phone && (window as any).login_config.phone_verify && gvc.glitter.getUrlParameter('page')!=='account_edit') {
429
+ const dialog=new ShareDialog(gvc.glitter);
430
+ dialog.infoMessage({
431
+ text:Language.text('phone_verify_check')
432
+ });
433
+ gvc.glitter.href='/account_edit'
434
+ }else{
435
+ if( GlobalUser.loginRedirect){
436
+ const red=GlobalUser.loginRedirect
437
+ GlobalUser.loginRedirect='';
438
+ gvc.glitter.href = red;
439
+ }else {
440
+ //蔡先生的Proshake頁面,沒時間先這樣改
441
+ if((window as any).appName==='proshake_v2'){
442
+ gvc.glitter.href = '/user_info';
443
+ }else{
444
+ gvc.glitter.href = '/account_userinfo';
445
+ }
516
446
 
517
- static backToLogin(gvc: GVC, vm: VM): string {
518
- return html`<section
519
- class="m-auto d-flex align-items-center justify-content-center my-2"
520
- style="cursor: pointer;"
447
+ }
448
+ }
449
+ });
450
+
451
+ }, 700);
452
+ }
453
+
454
+ static authThirdPartyHTML(gvc: GVC, widget: any, vm: VM) {
455
+ const loginEvents = this.getAuthLoginEvents(gvc, widget);
456
+
457
+ return html`<div class="w-100 d-flex align-items-center gap-2" style="color:#8D8D8D;">
458
+ <div class="${vm.prefix}-gray-hr"></div>
459
+ ${Language.text('or')}
460
+ <div class="${vm.prefix}-gray-hr"></div>
461
+ </div>
462
+ <div class="d-flex w-100 align-items-center justify-content-center gap-2">
463
+ ${[
464
+ {
465
+ type: 'google',
466
+ icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/Google__G__logo.svg.webp',
467
+ },
468
+ {
469
+ type: 'line',
470
+ icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/LINE_Brand_icon.png',
471
+ },
472
+ {
473
+ type: 'apple',
474
+ icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/14776639.png',
475
+ },
476
+ {
477
+ type: 'fb',
478
+ icon: 'https://d3jnmi1tfjgtti.cloudfront.net/file/252530754/5968764.png',
479
+ },
480
+ ]
481
+ .map((item) => {
482
+ if (!vm.loginConfig[item.type]) {
483
+ return '';
484
+ }
485
+
486
+ //Android版本不需要有APPLE登入
487
+ if(gvc.glitter.deviceType===gvc.glitter.deviceTypeEnum.Android && item.type === 'apple'){
488
+ return ``
489
+ }
490
+ const event = loginEvents.find((data) => data.key === item.type);
491
+ if (!event) {
492
+ return '';
493
+ }
494
+ event.created();
495
+
496
+ return html`<div
497
+ class="${vm.prefix}-auth-thrid-button"
521
498
  onclick="${gvc.event(() => {
522
- this.viewCallback(vm, 'login');
499
+ event.call();
523
500
  })}"
524
- >
525
- <img class="me-2" src="https://ui.homee.ai/htmlExtension/shopify/order/img/back.svg" />
526
- <span class="go-back-text">${Language.text('back_to_login_page')}</span>
527
- </section>`;
528
- }
529
-
530
- static sendCodeAgain(gvc: GVC, prefix: string, event: () => void) {
531
- const glitter = gvc.glitter;
532
- const id = glitter.getUUID();
533
- let n = 0;
534
- return gvc.bindView({
535
- bind: id,
536
- view: () => {
537
- return html`<span
538
- class="${prefix}-blue-note"
539
- onclick="${gvc.event(() => {
540
- if (n == 0) {
541
- event();
542
- n = 30;
543
- setTimeout(() => {
544
- gvc.notifyDataChange(id);
545
- }, 100);
546
- }
547
- })}"
548
- >${n > 0 ? Language.text('resend_code_timer').replace('xxx', n) : Language.text('get_verification_code')}</span
549
- >`;
550
- },
551
- divCreate: {
552
- class: 'text-end',
553
- },
554
- onCreate: () => {
555
- if (n > 0) {
556
- setTimeout(() => {
557
- n--;
558
- gvc.notifyDataChange(id);
559
- }, 1000);
501
+ >
502
+ <img style="width: 28px" src="${item.icon}" />
503
+ </div>`;
504
+ })
505
+ .join('')}
506
+ </div>`;
507
+ }
508
+
509
+ static checkValue(name: string): string | false {
510
+ const e = document.getElementById(name) as HTMLInputElement;
511
+ return e && e.value ? e.value : false;
512
+ }
513
+
514
+ static viewCallback(vm: VM, type: string): void {
515
+ setTimeout(() => {
516
+ $('html').scrollTop(0);
517
+ }, 100);
518
+ vm.viewType = type;
519
+ }
520
+
521
+ static backToLogin(gvc: GVC, vm: VM): string {
522
+ return html`<section
523
+ class="m-auto d-flex align-items-center justify-content-center my-2"
524
+ style="cursor: pointer;"
525
+ onclick="${gvc.event(() => {
526
+ this.viewCallback(vm, 'login');
527
+ })}"
528
+ >
529
+ <img class="me-2" src="https://ui.homee.ai/htmlExtension/shopify/order/img/back.svg" />
530
+ <span class="go-back-text">${Language.text('back_to_login_page')}</span>
531
+ </section>`;
532
+ }
533
+
534
+ static sendCodeAgain(gvc: GVC, prefix: string, event: () => void) {
535
+ const glitter = gvc.glitter;
536
+ const id = glitter.getUUID();
537
+ let n = 0;
538
+ return gvc.bindView({
539
+ bind: id,
540
+ view: () => {
541
+ return html`<span
542
+ class="${prefix}-blue-note"
543
+ onclick="${gvc.event(() => {
544
+ if (n == 0) {
545
+ event();
546
+ n = 30;
547
+ setTimeout(() => {
548
+ gvc.notifyDataChange(id);
549
+ }, 100);
550
+ }
551
+ })}"
552
+ >${n > 0 ? Language.text('resend_code_timer').replace('xxx', n) : Language.text('get_verification_code')}</span
553
+ >`;
554
+ },
555
+ divCreate: {
556
+ class: 'text-end',
557
+ },
558
+ onCreate: () => {
559
+ if (n > 0) {
560
+ setTimeout(() => {
561
+ n--;
562
+ gvc.notifyDataChange(id);
563
+ }, 1000);
564
+ }
565
+ },
566
+ });
567
+ }
568
+
569
+ static getAuthLoginEvents(gvc: GVC, widget: any): { key: string; created: () => void; call: () => void }[] {
570
+ const glitter = gvc.glitter;
571
+ return [
572
+ {
573
+ key: 'line',
574
+ created: () => {
575
+ if (gvc.glitter.getUrlParameter('state') === 'line_login') {
576
+ gvc.glitter.setUrlParameter('state', '');
577
+ ApiUser.login({
578
+ login_type: 'line',
579
+ line_token: gvc.glitter.getUrlParameter('code'),
580
+ redirect: (() => {
581
+ if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
582
+ return 'app';
583
+ } else {
584
+ const url = new URL(location.origin + location.pathname);
585
+ if (gvc.glitter.getUrlParameter('appName')) {
586
+ url.searchParams.set('appName', (window as any).appName);
587
+ }
588
+ return encodeURI(url.href);
560
589
  }
561
- },
562
- });
563
- }
564
-
565
- static getAuthLoginEvents(gvc: GVC, widget: any): { key: string; created: () => void; call: () => void }[] {
566
- const glitter = gvc.glitter;
567
- return [
568
- {
569
- key: 'line',
570
- created: () => {
571
- if (gvc.glitter.getUrlParameter('state') === 'line_login') {
572
- gvc.glitter.setUrlParameter('state', '');
573
- ApiUser.login({
574
- login_type: 'line',
575
- line_token: gvc.glitter.getUrlParameter('code'),
576
- redirect: (() => {
577
- if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
578
- return 'app';
579
- } else {
580
- const url = new URL(location.origin + location.pathname);
581
- if (gvc.glitter.getUrlParameter('appName')) {
582
- url.searchParams.set('appName', (window as any).appName);
583
- }
584
- return encodeURI(url.href);
585
- }
586
- })(),
587
- }).then((r) => {
588
- gvc.glitter.setUrlParameter('code', '');
589
- if (r.result) {
590
- this.successCallback(gvc, widget, r.response);
591
- } else {
592
- widget.event('error', { title: `Line: ${Language.text('login_failure')}` });
593
- }
594
- });
595
- } else {
596
- ApiUser.getPublicConfig('login_line_setting', 'manager').then((dd) => {
597
- widget.share.line = dd.response.value || {};
598
- if (gvc.glitter.getUrlParameter('line_liff') === 'true') {
599
- widget.event('loading', { visible: true });
600
- setTimeout(() => {
601
- localStorage.setItem('login_page', 'account');
602
- }, 100);
603
- }
604
- });
605
- }
606
- },
607
- call: () => {
608
- if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
609
- gvc.glitter.runJsInterFace(
610
- 'line_login',
611
- {
612
- id: widget.share.line.id,
613
- },
614
- (response) => {
615
- if (response.result) {
616
- gvc.glitter.setUrlParameter('state', 'line_login');
617
- gvc.glitter.setUrlParameter('code', response.code);
618
- gvc.recreateView();
619
- }
620
- }
621
- );
622
- } else {
623
- const redirect_url = location.origin + location.pathname;
624
- gvc.glitter.href = `https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=${widget.share.line.id}&redirect_uri=${encodeURI(
625
- redirect_url
626
- )}&state=line_login&scope=profile%20openid%20email&nonce=09876xyz`;
627
- }
628
- },
629
- },
630
- {
631
- key: 'google',
632
- created: () => {
633
- if (localStorage.getItem('google_login') === 'true') {
634
- localStorage.removeItem('google_login');
635
- ApiUser.login({
636
- login_type: 'google',
637
- google_token: gvc.glitter.getUrlParameter('code'),
638
- redirect: (() => {
639
- if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
640
- return 'app';
641
- } else {
642
- const googleRedirect = localStorage.getItem('google_redirect');
643
- return googleRedirect ? encodeURI(googleRedirect) : '';
644
- }
645
- })(),
646
- }).then((r) => {
647
- if (r.result) {
648
- this.successCallback(gvc, widget, r.response);
649
- } else {
650
- widget.event('error', { title: `Google: ${Language.text('login_failure')}` });
651
- }
652
- });
653
- } else {
654
- ApiUser.getPublicConfig('login_google_setting', 'manager').then((dd) => {
655
- widget.share.google = dd.response.value || {};
656
- });
657
- }
590
+ })(),
591
+ }).then((r) => {
592
+ gvc.glitter.setUrlParameter('code', '');
593
+ if (r.result) {
594
+ this.successCallback(gvc, widget, r.response);
595
+ } else {
596
+ widget.event('error', { title: `Line: ${Language.text('login_failure')}` });
597
+ }
598
+ });
599
+ } else {
600
+ ApiUser.getPublicConfig('login_line_setting', 'manager').then((dd) => {
601
+ widget.share.line = dd.response.value || {};
602
+ if (gvc.glitter.getUrlParameter('line_liff') === 'true') {
603
+ widget.event('loading', { visible: true });
604
+ setTimeout(() => {
605
+ localStorage.setItem('login_page', 'account');
606
+ }, 100);
607
+ }
608
+ });
609
+ }
610
+ },
611
+ call: () => {
612
+ if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
613
+ gvc.glitter.runJsInterFace(
614
+ 'line_login',
615
+ {
616
+ id: widget.share.line.id,
617
+ },
618
+ (response) => {
619
+ if (response.result) {
620
+ gvc.glitter.setUrlParameter('state', 'line_login');
621
+ gvc.glitter.setUrlParameter('code', response.code);
622
+ gvc.recreateView();
623
+ }
624
+ }
625
+ );
626
+ } else {
627
+ const redirect_url = location.origin + location.pathname;
628
+ gvc.glitter.href = `https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=${widget.share.line.id}&redirect_uri=${encodeURI(
629
+ redirect_url
630
+ )}&state=line_login&scope=profile%20openid%20email&nonce=09876xyz`;
631
+ }
632
+ },
633
+ },
634
+ {
635
+ key: 'google',
636
+ created: () => {
637
+ if (localStorage.getItem('google_login') === 'true') {
638
+ localStorage.removeItem('google_login');
639
+ ApiUser.login({
640
+ login_type: 'google',
641
+ google_token: gvc.glitter.getUrlParameter('code'),
642
+ redirect: (() => {
643
+ if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
644
+ return (glitter.deviceType===glitter.deviceTypeEnum.Android) ? 'android':'app';
645
+ } else {
646
+ const googleRedirect = localStorage.getItem('google_redirect');
647
+ return googleRedirect ? encodeURI(googleRedirect) : '';
648
+ }
649
+ })(),
650
+ }).then((r) => {
651
+ if (r.result) {
652
+ this.successCallback(gvc, widget, r.response);
653
+ } else {
654
+ widget.event('error', { title: `Google: ${Language.text('login_failure')}` });
655
+ }
656
+ });
657
+ } else {
658
+ ApiUser.getPublicConfig('login_google_setting', 'manager').then((dd) => {
659
+ widget.share.google = dd.response.value || {};
660
+ });
661
+ }
662
+ },
663
+ call: () => {
664
+ const redirect_url = location.origin + location.pathname;
665
+
666
+ localStorage.setItem('google_login', 'true');
667
+ localStorage.setItem('google_redirect', redirect_url);
668
+
669
+ if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
670
+ ApiUser.getPublicConfig('login_google_setting', 'manager').then((dd) => {
671
+ widget.share.google = dd.response.value || {};
672
+ gvc.glitter.runJsInterFace(
673
+ 'google_login',
674
+ {
675
+ app_id: (glitter.deviceType===glitter.deviceTypeEnum.Android) ? widget.share.google.android_app_id:widget.share.google.app_id,
658
676
  },
659
- call: () => {
660
- const redirect_url = location.origin + location.pathname;
661
-
662
- localStorage.setItem('google_login', 'true');
663
- localStorage.setItem('google_redirect', redirect_url);
664
-
665
- if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
666
- ApiUser.getPublicConfig('login_google_setting', 'manager').then((dd) => {
667
- widget.share.google = dd.response.value || {};
668
- gvc.glitter.runJsInterFace(
669
- 'google_login',
670
- {
671
- app_id: widget.share.google.app_id,
672
- },
673
- (response) => {
674
- if (response.result) {
675
- gvc.glitter.setUrlParameter('state', 'google_login');
676
- gvc.glitter.setUrlParameter('code', response.code);
677
- gvc.recreateView();
678
- }
679
- }
680
- );
681
- });
677
+ (response) => {
678
+ if (response.result) {
679
+ gvc.glitter.setUrlParameter('state', 'google_login');
680
+ gvc.glitter.setUrlParameter('code', response.code);
681
+ gvc.recreateView();
682
+ }
683
+ }
684
+ );
685
+ });
682
686
 
687
+ } else {
688
+ gvc.glitter.href = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${widget.share.google.id}&redirect_uri=${redirect_url}&state=google_login&response_type=code&scope=profile+email`;
689
+ }
690
+ },
691
+ },
692
+ {
693
+ key: 'fb',
694
+ created: () => {
695
+ ApiUser.getPublicConfig('login_fb_setting', 'manager').then((dd) => {
696
+ widget.share.fb = dd.response.value || {};
697
+ const loadFacebookSDK = () => {
698
+ const intervalId = setInterval(() => {
699
+ // 檢查 SDK 是否已載入
700
+ const FB = (window as any).FB;
701
+ if (FB) {
702
+ clearInterval(intervalId); // 清除間隔
703
+ FB.init({
704
+ appId: widget.share.fb.id,
705
+ xfbml : true,
706
+ version : 'v22.0'
707
+ });
708
+ return;
709
+ }
710
+
711
+ // 如果未載入,創建 script 標籤
712
+ const sdkId = 'facebook-jssdk';
713
+ if (!document.getElementById(sdkId)) {
714
+ const script = document.createElement('script');
715
+ script.id = sdkId;
716
+ script.src = 'https://connect.facebook.net/en_US/sdk.js';
717
+ const firstScript = document.getElementsByTagName('script')[0];
718
+ firstScript.parentNode?.insertBefore(script, firstScript);
719
+ }
720
+ }, 500);
721
+ };
722
+
723
+ loadFacebookSDK();
724
+ });
725
+ },
726
+ call: () => {
727
+ return new Promise(async (resolve, reject) => {
728
+ console.log('call fb',widget.share.fb)
729
+
730
+ if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
731
+ gvc.glitter.runJsInterFace('facebook_login', {
732
+ app_id:widget.share.fb.id,
733
+ secret:widget.share.fb.secret
734
+ }, (response) => {
735
+ if (response.result) {
736
+ ApiUser.login({
737
+ login_type: 'fb',
738
+ fb_token: response.accessToken,
739
+ }).then((r) => {
740
+ if (r.result) {
741
+ this.successCallback(gvc, widget, r.response);
683
742
  } else {
684
- gvc.glitter.href = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${widget.share.google.id}&redirect_uri=${redirect_url}&state=google_login&response_type=code&scope=profile+email`;
743
+ widget.event('error', { title: `Facebook: ${Language.text('login_failure')}` });
685
744
  }
686
- },
687
- },
688
- {
689
- key: 'fb',
690
- created: () => {
691
- ApiUser.getPublicConfig('login_fb_setting', 'manager').then((dd) => {
692
- widget.share.fb = dd.response.value || {};
693
- const loadFacebookSDK = () => {
694
- const intervalId = setInterval(() => {
695
- // 檢查 SDK 是否已載入
696
- const FB = (window as any).FB;
697
- if (FB) {
698
- clearInterval(intervalId); // 清除間隔
699
- FB.init({
700
- appId: widget.share.fb.id,
701
- xfbml : true,
702
- version : 'v22.0'
703
- });
704
- return;
705
- }
706
-
707
- // 如果未載入,創建 script 標籤
708
- const sdkId = 'facebook-jssdk';
709
- if (!document.getElementById(sdkId)) {
710
- const script = document.createElement('script');
711
- script.id = sdkId;
712
- script.src = 'https://connect.facebook.net/en_US/sdk.js';
713
- const firstScript = document.getElementsByTagName('script')[0];
714
- firstScript.parentNode?.insertBefore(script, firstScript);
715
- }
716
- }, 500);
717
- };
718
-
719
- loadFacebookSDK();
720
- });
721
- },
722
- call: () => {
723
- return new Promise(async (resolve, reject) => {
724
- console.log('call fb',widget.share.fb)
725
-
726
- if (glitter.deviceType !== glitter.deviceTypeEnum.Web) {
727
- gvc.glitter.runJsInterFace('facebook_login', {
728
- app_id:widget.share.fb.id,
729
- secret:widget.share.fb.secret
730
- }, (response) => {
731
- if (response.result) {
732
- ApiUser.login({
733
- login_type: 'fb',
734
- fb_token: response.accessToken,
735
- }).then((r) => {
736
- if (r.result) {
737
- this.successCallback(gvc, widget, r.response);
738
- } else {
739
- widget.event('error', { title: `Facebook: ${Language.text('login_failure')}` });
740
- }
741
- });
742
- }
743
- });
744
- } else {
745
- (window as any).FB.login(
746
- (response: any) => {
747
- const accessToken = response.authResponse.accessToken;
748
- ApiUser.login({
749
- login_type: 'fb',
750
- fb_token: accessToken,
751
- }).then((r) => {
752
- if (r.result) {
753
- this.successCallback(gvc, widget, r.response);
754
- } else {
755
- widget.event('error', { title: `Facebook: ${Language.text('login_failure')}` });
756
- }
757
- });
758
- },
759
- { scope: 'public_profile,email' }
760
- );
761
- }
762
- });
763
- },
764
- },
765
- {
766
- key: 'apple',
767
- created: () => {
768
- const appleCode = (window as any).post_body.code;
769
- if (appleCode) {
770
- ApiUser.login({
771
- login_type: 'apple',
772
- token: appleCode,
773
- }).then((r) => {
774
- if (r.result) {
775
- this.successCallback(gvc, widget, r.response);
776
- } else {
777
- widget.event('error', { title: `Apple: ${Language.text('login_failure')}` });
778
- }
779
- });
745
+ });
746
+ }
747
+ });
748
+ } else {
749
+ (window as any).FB.login(
750
+ (response: any) => {
751
+ const accessToken = response.authResponse.accessToken;
752
+ ApiUser.login({
753
+ login_type: 'fb',
754
+ fb_token: accessToken,
755
+ }).then((r) => {
756
+ if (r.result) {
757
+ this.successCallback(gvc, widget, r.response);
780
758
  } else {
781
- gvc.addMtScript(
782
- [
783
- {
784
- src: 'https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js',
785
- },
786
- ],
787
- () => {
788
- ApiUser.getPublicConfig('login_apple_setting', 'manager').then((dd) => {
789
- widget.share.apple = dd.response.value || {};
790
- });
791
- },
792
- () => {}
793
- );
759
+ widget.event('error', { title: `Facebook: ${Language.text('login_failure')}` });
794
760
  }
761
+ });
795
762
  },
796
- call: () => {
797
- const AppleID = (window as any).AppleID;
798
- AppleID.auth.init({
799
- clientId: widget.share.apple.id,
800
- scope: 'name email',
801
- redirectURI: `https://${document.domain}/login`,
802
- usePopup: false,
803
- });
804
- AppleID.auth.signIn();
763
+ { scope: 'public_profile,email' }
764
+ );
765
+ }
766
+ });
767
+ },
768
+ },
769
+ {
770
+ key: 'apple',
771
+ created: () => {
772
+ const appleCode = (window as any).post_body.code;
773
+ if (appleCode) {
774
+ ApiUser.login({
775
+ login_type: 'apple',
776
+ token: appleCode,
777
+ }).then((r) => {
778
+ if (r.result) {
779
+ this.successCallback(gvc, widget, r.response);
780
+ } else {
781
+ widget.event('error', { title: `Apple: ${Language.text('login_failure')}` });
782
+ }
783
+ });
784
+ } else {
785
+ gvc.addMtScript(
786
+ [
787
+ {
788
+ src: 'https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js',
805
789
  },
806
- },
807
- ];
790
+ ],
791
+ () => {
792
+ ApiUser.getPublicConfig('login_apple_setting', 'manager').then((dd) => {
793
+ widget.share.apple = dd.response.value || {};
794
+ });
795
+ },
796
+ () => {}
797
+ );
798
+ }
799
+ },
800
+ call: () => {
801
+ const AppleID = (window as any).AppleID;
802
+ AppleID.auth.init({
803
+ clientId: widget.share.apple.id,
804
+ scope: 'name email',
805
+ redirectURI: `https://${document.domain}/login`,
806
+ usePopup: false,
807
+ });
808
+ AppleID.auth.signIn();
809
+ },
810
+ },
811
+ ];
812
+ }
813
+
814
+ static registerByNormal(gvc: GVC, widget: any, vm: VM) {
815
+ const password = this.checkValue('vm-password');
816
+ const confirmPassword = this.checkValue('vm-confirm-password');
817
+
818
+ if (!password) {
819
+ widget.event('error', { title: Language.text('please_enter_password') });
820
+ return;
808
821
  }
809
-
810
- static registerByNormal(gvc: GVC, widget: any, vm: VM) {
811
- const password = this.checkValue('vm-password');
812
- const confirmPassword = this.checkValue('vm-confirm-password');
813
-
814
- if (!password) {
815
- widget.event('error', { title: Language.text('please_enter_password') });
816
- return;
817
- }
818
- if (!confirmPassword) {
819
- widget.event('error', { title: Language.text('please_confirm_password_again') });
820
- return;
821
- }
822
- if (password !== confirmPassword) {
823
- widget.event('error', { title: Language.text('password_mismatch') });
824
- return;
825
- }
826
-
827
- const userData = {} as any;
828
-
829
- for (const item of vm.registerConfig) {
830
- if (item.hidden) {
831
- continue;
832
- }
833
-
834
- if ((item.key === 'email' && vm.loginConfig.email_verify) || (item.key === 'phone' && vm.loginConfig.phone_verify)) {
835
- const vData = this.checkValue(`reg-${item.key}-verify`);
836
- if (item.key === 'email') {
837
- if (!vData) {
838
- widget.event('error', { title: Language.text('please_enter_email_verification_code') });
839
- return;
840
- }
841
- userData.verify_code = vData;
842
- }
843
- if (item.key === 'phone') {
844
- if (!vData) {
845
- widget.event('error', { title: Language.text('please_enter_sms_verification_code') });
846
- return;
847
- }
848
- userData.verify_code_phone = vData;
849
- }
850
- }
851
-
852
- const data = this.checkValue(`reg-${item.key}`);
853
- if (item.require && !data) {
854
- widget.event('error', { title: `${Language.text('please_enter')}「${item.title}」` });
855
- return;
856
- }
857
- if (item.key === 'email' && data && !CheckInput.isEmail(data)) {
858
- widget.event('error', { title: Language.text('enter_valid_email') });
859
- return;
860
- }
861
- if (item.key === 'phone' && data && !CheckInput.isTaiwanPhone(data)) {
862
- widget.event('error', { title: Language.text('enter_valid_phone_number') });
863
- return;
864
- }
865
- userData[item.key] = data;
866
- }
867
-
868
- widget.event('loading', { visible: true });
869
- ApiUser.register({
870
- account: userData.email || userData.phone,
871
- pwd: password,
872
- userData: userData,
873
- }).then((r) => {
874
- widget.event('loading', { visible: false });
875
- if (r.result) {
876
- this.successCallback(gvc, widget, r.response, Language.text('registration_success'));
877
- return;
878
- }
879
- if (r.response.message === 'user is already exists') {
880
- widget.event('error', { title: Language.text('existing_user') });
881
- return;
882
- }
883
- if (!r.response.data) {
884
- widget.event('error', { title: Language.text('registration_failure') });
885
- return;
886
- }
887
- if (r.response.data.msg === 'email-verify-false') {
888
- widget.event('error', { title: Language.text('email_verification_code_incorrect') });
889
- return;
890
- }
891
- if (r.response.data.msg === 'phone-verify-false') {
892
- widget.event('error', { title: Language.text('sms_verification_code_incorrect') });
893
- return;
894
- }
895
- });
822
+ if (!confirmPassword) {
823
+ widget.event('error', { title: Language.text('please_confirm_password_again') });
824
+ return;
896
825
  }
826
+ if (password !== confirmPassword) {
827
+ widget.event('error', { title: Language.text('password_mismatch') });
828
+ return;
829
+ }
830
+
831
+ const userData = {} as any;
897
832
 
898
- static loginByNormal(gvc: GVC, widget: any) {
899
- const account = this.checkValue('vm-account');
900
- const password = this.checkValue('vm-password');
833
+ for (const item of vm.registerConfig) {
834
+ if (item.hidden) {
835
+ continue;
836
+ }
901
837
 
902
- if (!account) {
903
- widget.event('error', { title: Language.text('email_phone_placeholder') });
838
+ if ((item.key === 'email' && vm.loginConfig.email_verify) || (item.key === 'phone' && vm.loginConfig.phone_verify)) {
839
+ const vData = this.checkValue(`reg-${item.key}-verify`);
840
+ if (item.key === 'email') {
841
+ if (!vData) {
842
+ widget.event('error', { title: Language.text('please_enter_email_verification_code') });
904
843
  return;
844
+ }
845
+ userData.verify_code = vData;
905
846
  }
906
- if (!password) {
907
- widget.event('error', { title: Language.text('please_enter_password') });
847
+ if (item.key === 'phone') {
848
+ if (!vData) {
849
+ widget.event('error', { title: Language.text('please_enter_sms_verification_code') });
908
850
  return;
851
+ }
852
+ userData.verify_code_phone = vData;
909
853
  }
910
-
911
- ApiUser.login({
912
- account: account,
913
- pwd: password,
914
- }).then((r) => {
915
- if (r.result) {
916
- this.successCallback(gvc, widget, r.response);
917
- } else {
918
- widget.event('error', { title: Language.text('incorrect_credentials') });
919
- }
920
- });
854
+ }
855
+
856
+ const data = this.checkValue(`reg-${item.key}`);
857
+ if (item.require && !data) {
858
+ widget.event('error', { title: `${Language.text('please_enter')}「${item.title}」` });
859
+ return;
860
+ }
861
+ if (item.key === 'email' && data && !CheckInput.isEmail(data)) {
862
+ widget.event('error', { title: Language.text('enter_valid_email') });
863
+ return;
864
+ }
865
+ if (item.key === 'phone' && data && !CheckInput.isTaiwanPhone(data)) {
866
+ widget.event('error', { title: Language.text('enter_valid_phone_number') });
867
+ return;
868
+ }
869
+ userData[item.key] = data;
921
870
  }
922
871
 
923
- static sendResetEmail(widget: any, vm: VM) {
924
- if (!vm.resetEmail) {
925
- const email = this.checkValue('vm-email');
926
-
927
- if (!email) {
928
- widget.event('error', { title: Language.text('email_placeholder') });
929
- return;
930
- }
931
- if (!CheckInput.isEmail(email)) {
932
- widget.event('error', { title: Language.text('enter_valid_email') });
933
- return;
934
- }
935
-
936
- vm.resetEmail = email;
937
- }
938
-
939
- widget.event('loading', { visible: true });
940
- ApiUser.forgetPwd(vm.resetEmail).then((r) => {
941
- widget.event('loading', { visible: false });
942
- if (r.result && r.response.result) {
943
- widget.event('success', { title: Language.text('verification_code_sent') });
944
- if (vm.viewType !== 'validation_code') {
945
- setTimeout(() => {
946
- vm.viewType = 'validation_code';
947
- }, 1000);
948
- }
949
- } else {
950
- widget.event('error', { title: Language.text('system_error') });
951
- }
952
- });
872
+ widget.event('loading', { visible: true });
873
+ ApiUser.register({
874
+ account: userData.email || userData.phone,
875
+ pwd: password,
876
+ userData: userData,
877
+ }).then((r) => {
878
+ widget.event('loading', { visible: false });
879
+ if (r.result) {
880
+ this.successCallback(gvc, widget, r.response, Language.text('registration_success'));
881
+ return;
882
+ }
883
+ if (r.response.message === 'user is already exists') {
884
+ widget.event('error', { title: Language.text('existing_user') });
885
+ return;
886
+ }
887
+ if (!r.response.data) {
888
+ widget.event('error', { title: Language.text('registration_failure') });
889
+ return;
890
+ }
891
+ if (r.response.data.msg === 'email-verify-false') {
892
+ widget.event('error', { title: Language.text('email_verification_code_incorrect') });
893
+ return;
894
+ }
895
+ if (r.response.data.msg === 'phone-verify-false') {
896
+ widget.event('error', { title: Language.text('sms_verification_code_incorrect') });
897
+ return;
898
+ }
899
+ });
900
+ }
901
+
902
+ static loginByNormal(gvc: GVC, widget: any) {
903
+ const account = this.checkValue('vm-account');
904
+ const password = this.checkValue('vm-password');
905
+
906
+ if (!account) {
907
+ widget.event('error', { title: Language.text('email_phone_placeholder') });
908
+ return;
909
+ }
910
+ if (!password) {
911
+ widget.event('error', { title: Language.text('please_enter_password') });
912
+ return;
953
913
  }
954
914
 
955
- static sendVerifyEmailCode(widget: any, id: string) {
956
- const email = this.checkValue(id);
915
+ ApiUser.login({
916
+ account: account,
917
+ pwd: password,
918
+ }).then((r) => {
919
+ if (r.result) {
920
+ this.successCallback(gvc, widget, r.response);
921
+ } else {
922
+ widget.event('error', { title: Language.text('incorrect_credentials') });
923
+ }
924
+ });
925
+ }
926
+
927
+ static sendResetEmail(widget: any, vm: VM) {
928
+ if (!vm.resetEmail) {
929
+ const email = this.checkValue('vm-email');
930
+
931
+ if (!email) {
932
+ widget.event('error', { title: Language.text('email_placeholder') });
933
+ return;
934
+ }
935
+ if (!CheckInput.isEmail(email)) {
936
+ widget.event('error', { title: Language.text('enter_valid_email') });
937
+ return;
938
+ }
939
+
940
+ vm.resetEmail = email;
941
+ }
957
942
 
958
- if (!email) {
959
- widget.event('error', { title: Language.text('email_placeholder') });
960
- return;
961
- }
962
- if (!CheckInput.isEmail(email)) {
963
- widget.event('error', { title: Language.text('enter_valid_email') });
964
- return;
943
+ widget.event('loading', { visible: true });
944
+ ApiUser.forgetPwd(vm.resetEmail).then((r) => {
945
+ widget.event('loading', { visible: false });
946
+ if (r.result && r.response.result) {
947
+ widget.event('success', { title: Language.text('verification_code_sent') });
948
+ if (vm.viewType !== 'validation_code') {
949
+ setTimeout(() => {
950
+ vm.viewType = 'validation_code';
951
+ }, 1000);
965
952
  }
966
-
967
- ApiUser.emailVerify(email).then((r) => {
968
- if (r.result && r.response.result) {
969
- widget.event('success', { title: Language.text('verification_code_sent') });
970
- } else {
971
- widget.event('error', { title: Language.text('system_error') });
972
- }
973
- });
953
+ } else {
954
+ widget.event('error', { title: Language.text('system_error') });
955
+ }
956
+ });
957
+ }
958
+
959
+ static sendVerifyEmailCode(widget: any, id: string) {
960
+ const email = this.checkValue(id);
961
+
962
+ if (!email) {
963
+ widget.event('error', { title: Language.text('email_placeholder') });
964
+ return;
965
+ }
966
+ if (!CheckInput.isEmail(email)) {
967
+ widget.event('error', { title: Language.text('enter_valid_email') });
968
+ return;
974
969
  }
975
970
 
976
- static async sendVerifyPhoneCode(widget: any, id: string) {
977
- const phone = UMLogin.checkValue(id);
978
-
979
- if (!phone) {
980
- widget.event('error', { title: Language.text('enter_phone_number') });
981
- return;
982
- }
983
- if (!CheckInput.isTaiwanPhone(phone)) {
984
- widget.event('error', { title: Language.text('enter_valid_phone_number') });
985
- return;
986
- }
971
+ ApiUser.emailVerify(email).then((r) => {
972
+ if (r.result && r.response.result) {
973
+ widget.event('success', { title: Language.text('verification_code_sent') });
974
+ } else {
975
+ widget.event('error', { title: Language.text('system_error') });
976
+ }
977
+ });
978
+ }
979
+
980
+ static async sendVerifyPhoneCode(widget: any, id: string) {
981
+ const phone = UMLogin.checkValue(id);
982
+
983
+ if (!phone) {
984
+ widget.event('error', { title: Language.text('enter_phone_number') });
985
+ return;
986
+ }
987
+ if (!CheckInput.isTaiwanPhone(phone)) {
988
+ widget.event('error', { title: Language.text('enter_valid_phone_number') });
989
+ return;
990
+ }
987
991
 
988
- if ((await ApiUser.getPhoneCount(phone)).response.result) {
989
- widget.event('error', { title: Language.text('phone_number_already_exists') });
992
+ if ((await ApiUser.getPhoneCount(phone)).response.result) {
993
+ widget.event('error', { title: Language.text('phone_number_already_exists') });
994
+ } else {
995
+ ApiUser.phoneVerify(phone).then((r) => {
996
+ if (r.result && r.response.result) {
997
+ widget.event('success', { title: Language.text('verification_code_sent') });
990
998
  } else {
991
- ApiUser.phoneVerify(phone).then((r) => {
992
- if (r.result && r.response.result) {
993
- widget.event('success', { title: Language.text('verification_code_sent') });
994
- } else {
995
- widget.event('error', { title: Language.text('system_error') });
996
- }
997
- });
999
+ widget.event('error', { title: Language.text('system_error') });
998
1000
  }
999
-
1001
+ });
1000
1002
  }
1001
1003
 
1002
- static verifySubmitCode(widget: any, vm: VM) {
1003
- const code = this.checkValue('vm-code');
1004
+ }
1004
1005
 
1005
- if (!code) {
1006
- widget.event('error', { title: Language.text('please_enter_verification_code') });
1007
- return;
1008
- }
1006
+ static verifySubmitCode(widget: any, vm: VM) {
1007
+ const code = this.checkValue('vm-code');
1009
1008
 
1010
- ApiUser.forgetPwdCheckCode(vm.resetEmail, code).then((r) => {
1011
- if (r.result && r.response.result) {
1012
- vm.validationCode = code;
1013
- vm.viewType = 'reset_password';
1014
- } else {
1015
- widget.event('error', { title: Language.text('email_verification_code_incorrect') });
1016
- }
1017
- });
1009
+ if (!code) {
1010
+ widget.event('error', { title: Language.text('please_enter_verification_code') });
1011
+ return;
1018
1012
  }
1019
1013
 
1020
- static resetNewPassword(widget: any, vm: VM) {
1021
- const newPassword = this.checkValue('vm-new-password');
1022
- const confirmPassword = this.checkValue('vm-confirm-password');
1023
-
1024
- if (!newPassword) {
1025
- widget.event('error', { title: Language.text('please_enter_new_password') });
1026
- return;
1027
- }
1028
- if (!confirmPassword) {
1029
- widget.event('error', { title: Language.text('please_confirm_password_again') });
1030
- return;
1031
- }
1032
- if (newPassword !== confirmPassword) {
1033
- widget.event('error', { title: Language.text('password_mismatch') });
1034
- return;
1035
- }
1036
-
1037
- ApiUser.resetPwdV2(vm.resetEmail, vm.validationCode, newPassword).then((r) => {
1038
- vm.resetEmail = '';
1039
- if (r.result && r.response.result) {
1040
- widget.event('success', { title: Language.text('password_change_success') });
1041
- setTimeout(() => {
1042
- this.viewCallback(vm, 'login');
1043
- }, 1000);
1044
- } else {
1045
- widget.event('error', { title: Language.text('password_change_failure') });
1046
- }
1047
- });
1014
+ ApiUser.forgetPwdCheckCode(vm.resetEmail, code).then((r) => {
1015
+ if (r.result && r.response.result) {
1016
+ vm.validationCode = code;
1017
+ vm.viewType = 'reset_password';
1018
+ } else {
1019
+ widget.event('error', { title: Language.text('email_verification_code_incorrect') });
1020
+ }
1021
+ });
1022
+ }
1023
+
1024
+ static resetNewPassword(widget: any, vm: VM) {
1025
+ const newPassword = this.checkValue('vm-new-password');
1026
+ const confirmPassword = this.checkValue('vm-confirm-password');
1027
+
1028
+ if (!newPassword) {
1029
+ widget.event('error', { title: Language.text('please_enter_new_password') });
1030
+ return;
1031
+ }
1032
+ if (!confirmPassword) {
1033
+ widget.event('error', { title: Language.text('please_confirm_password_again') });
1034
+ return;
1048
1035
  }
1036
+ if (newPassword !== confirmPassword) {
1037
+ widget.event('error', { title: Language.text('password_mismatch') });
1038
+ return;
1039
+ }
1040
+
1041
+ ApiUser.resetPwdV2(vm.resetEmail, vm.validationCode, newPassword).then((r) => {
1042
+ vm.resetEmail = '';
1043
+ if (r.result && r.response.result) {
1044
+ widget.event('success', { title: Language.text('password_change_success') });
1045
+ setTimeout(() => {
1046
+ this.viewCallback(vm, 'login');
1047
+ }, 1000);
1048
+ } else {
1049
+ widget.event('error', { title: Language.text('password_change_failure') });
1050
+ }
1051
+ });
1052
+ }
1049
1053
  }
1050
1054
 
1051
1055
  (window as any).glitter.setModule(import.meta.url, UMLogin);