ts-glitter 20.7.4 → 20.7.6

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 (250) 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 +2 -2
  32. package/lowcode/cms-plugin/third-party-google.ts +2 -2
  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 +268 -265
  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 +23 -16
  159. package/src/api-public/services/user.js.map +1 -1
  160. package/src/api-public/services/user.ts +100 -90
  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 +1 -3
  206. package/src/modules/caught-error.js.map +1 -1
  207. package/src/modules/caught-error.ts +1 -3
  208. package/src/modules/database.d.ts +2 -1
  209. package/src/modules/database.js.map +1 -1
  210. package/src/modules/exception.js.map +1 -1
  211. package/src/modules/firebase.js.map +1 -1
  212. package/src/modules/hooks.js.map +1 -1
  213. package/src/modules/logger.js.map +1 -1
  214. package/src/modules/redis.d.ts +1 -1
  215. package/src/modules/redis.js.map +1 -1
  216. package/src/modules/response.js.map +1 -1
  217. package/src/modules/ssh.js.map +1 -1
  218. package/src/modules/tool.d.ts +4 -4
  219. package/src/modules/tool.js +2 -1
  220. package/src/modules/tool.js.map +1 -1
  221. package/src/public-config-initial/auto-fcm.js.map +1 -1
  222. package/src/run.js +2 -1
  223. package/src/run.js.map +1 -1
  224. package/src/seo-config.d.ts +1 -0
  225. package/src/seo-config.js +3 -3
  226. package/src/seo-config.js.map +1 -1
  227. package/src/services/ai.js.map +1 -1
  228. package/src/services/app.js.map +1 -1
  229. package/src/services/backend-service.js.map +1 -1
  230. package/src/services/create-instance.js +4 -3
  231. package/src/services/create-instance.js.map +1 -1
  232. package/src/services/global-event.js.map +1 -1
  233. package/src/services/ios-release.js.map +1 -1
  234. package/src/services/page.js.map +1 -1
  235. package/src/services/private_config.js.map +1 -1
  236. package/src/services/release.js.map +1 -1
  237. package/src/services/saas-table-check.js +2 -2
  238. package/src/services/saas-table-check.js.map +1 -1
  239. package/src/services/seo.js.map +1 -1
  240. package/src/services/ses.js +2 -1
  241. package/src/services/ses.js.map +1 -1
  242. package/src/services/system-schedule.js.map +1 -1
  243. package/src/services/template.js.map +1 -1
  244. package/src/services/tool.js +3 -2
  245. package/src/services/tool.js.map +1 -1
  246. package/src/services/user.js.map +1 -1
  247. package/src/services/web-socket.js.map +1 -1
  248. package/src/update-progress-track.js.map +1 -1
  249. package/src/update-script.js.map +1 -1
  250. package/src/api-public/services/checkout-service.js +0 -1074
@@ -4,128 +4,144 @@ import { ApiPost } from '../../glitter-base/route/post.js';
4
4
  import { Tool } from '../../modules/tool.js';
5
5
 
6
6
  interface MenuItem {
7
- name: string;
8
- icon: string;
9
- link: string;
10
- items?: MenuItem[];
7
+ name: string;
8
+ icon: string;
9
+ link: string;
10
+ items?: MenuItem[];
11
11
  }
12
12
 
13
13
  interface CollecrtionItem {
14
- title: string;
15
- array?: CollecrtionItem[];
16
- code: string;
14
+ title: string;
15
+ array?: CollecrtionItem[];
16
+ code: string;
17
17
  }
18
18
 
19
19
  export class PathSelect {
20
- public static getData(obj: { gvc: GVC; title: string; default: string; placeHolder: string; callback: (path: string) => void; style?: string; readonly?: boolean; pattern?: string }) {
21
- obj.title = obj.title ?? '';
22
- const html = String.raw;
23
- const vm = {
24
- id: obj.gvc.glitter.getUUID(),
25
- loading: true,
26
- };
27
- const linkComp = {
28
- id: obj.gvc.glitter.getUUID(),
29
- loading: true,
30
- text: obj.default ?? '',
31
- };
32
- const dropMenu = {
33
- id: obj.gvc.glitter.getUUID(),
34
- elementClass: Tool.randomString(5),
35
- elementWidth: 240,
36
- loading: true,
37
- search: '',
38
- prevList: [] as MenuItem[][],
39
- recentList: {} as MenuItem[],
40
- recentParent: [] as string[],
41
- };
20
+ public static getData(obj: {
21
+ gvc: GVC;
22
+ title: string;
23
+ default: string;
24
+ placeHolder: string;
25
+ callback: (path: string) => void;
26
+ style?: string;
27
+ readonly?: boolean;
28
+ pattern?: string;
29
+ }) {
30
+ obj.title = obj.title ?? '';
31
+ const html = String.raw;
32
+ const vm = {
33
+ id: obj.gvc.glitter.getUUID(),
34
+ loading: true,
35
+ };
36
+ const linkComp = {
37
+ id: obj.gvc.glitter.getUUID(),
38
+ loading: true,
39
+ text: obj.default ?? '',
40
+ };
41
+ const dropMenu = {
42
+ id: obj.gvc.glitter.getUUID(),
43
+ elementClass: Tool.randomString(5),
44
+ elementWidth: 240,
45
+ loading: true,
46
+ search: '',
47
+ prevList: [] as MenuItem[][],
48
+ recentList: {} as MenuItem[],
49
+ recentParent: [] as string[],
50
+ };
42
51
 
43
- // 遞迴類別資料的物件
44
- const setCollectionPath = (target: MenuItem[], data: CollecrtionItem[]) => {
45
- (data || []).map((item, index) => {
46
- const { title, array, code } = item;
47
- target.push({ name: title, icon: '', link: `/collections/${code}` });
48
- if (array && array.length > 0) {
49
- target[index].items = [];
50
- setCollectionPath(target[index].items as MenuItem[], array);
51
- }
52
- });
53
- };
52
+ // 遞迴類別資料的物件
53
+ const setCollectionPath = (target: MenuItem[], data: CollecrtionItem[]) => {
54
+ (data || []).map((item, index) => {
55
+ const { title, array, code } = item;
56
+ target.push({ name: title, icon: '', link: `/collections/${code}` });
57
+ if (array && array.length > 0) {
58
+ target[index].items = [];
59
+ setCollectionPath(target[index].items as MenuItem[], array);
60
+ }
61
+ });
62
+ };
54
63
 
55
- // 確認網址,回傳icon與父子層陣列
56
- const findMenuItemPathByLink = (items: MenuItem[], link: string): { icon: string; nameMap: string[] } | undefined => {
57
- for (const item of items) {
58
- if (item.link === link) {
59
- return { icon: item.icon, nameMap: [item.name] };
60
- }
61
- if (item.items) {
62
- const path = findMenuItemPathByLink(item.items, link);
63
- if (path?.nameMap) {
64
- return { icon: item.icon, nameMap: [item.name, ...path?.nameMap] };
65
- }
66
- }
67
- }
68
- return undefined;
69
- };
64
+ // 確認網址,回傳icon與父子層陣列
65
+ const findMenuItemPathByLink = (
66
+ items: MenuItem[],
67
+ link: string
68
+ ): { icon: string; nameMap: string[] } | undefined => {
69
+ for (const item of items) {
70
+ if (item.link === link) {
71
+ return { icon: item.icon, nameMap: [item.name] };
72
+ }
73
+ if (item.items) {
74
+ const path = findMenuItemPathByLink(item.items, link);
75
+ if (path?.nameMap) {
76
+ return { icon: item.icon, nameMap: [item.name, ...path?.nameMap] };
77
+ }
78
+ }
79
+ }
80
+ return undefined;
81
+ };
70
82
 
71
- // 繪製父子層容器 html
72
- const formatLinkHTML = (icon: string, pathList: string[]) => {
73
- let pathHTML = '';
74
- pathList.map((path, index) => {
75
- pathHTML += html`<span class="mx-1">${path}</span>${index === pathList.length - 1 ? '' : html`<i class="fa-solid fa-chevron-right"></i>`}`;
76
- });
77
- return html` <div style="display: flex; flex-wrap: wrap; align-items: center; font-size: 16px; font-weight: 500; gap: 6px; line-height: 140%;cursor: default;">
78
- <div style="width: 28px;height: 28px;display: flex; align-items: center; justify-content:center;">
79
- <i class="${icon.length > 0 ? icon : 'fa-regular fa-image'}"></i>
80
- </div>
81
- ${pathHTML}
82
- </div>`;
83
- };
83
+ // 繪製父子層容器 html
84
+ const formatLinkHTML = (icon: string, pathList: string[]) => {
85
+ let pathHTML = '';
86
+ pathList.map((path, index) => {
87
+ pathHTML += html`<span class="mx-1">${path}</span>${index === pathList.length - 1
88
+ ? ''
89
+ : html`<i class="fa-solid fa-chevron-right"></i>`}`;
90
+ });
91
+ return html` <div
92
+ style="display: flex; flex-wrap: wrap; align-items: center; font-size: 16px; font-weight: 500; gap: 6px; line-height: 140%;cursor: default;"
93
+ >
94
+ <div style="width: 28px;height: 28px;display: flex; align-items: center; justify-content:center;">
95
+ <i class="${icon.length > 0 ? icon : 'fa-regular fa-image'}"></i>
96
+ </div>
97
+ ${pathHTML}
98
+ </div>`;
99
+ };
84
100
 
85
- // 判斷父子層容器或純網址
86
- const formatLinkText = (text: string) => {
87
- const firstRound = dropMenu.recentList.find((item) => item.link === text);
88
- if (firstRound) {
89
- return formatLinkHTML(firstRound.icon, [firstRound.name]);
90
- }
91
- const targetItem = findMenuItemPathByLink(dropMenu.recentList, text);
92
- if (targetItem) {
93
- return formatLinkHTML(targetItem.icon, targetItem.nameMap);
94
- }
95
- return text;
96
- };
101
+ // 判斷父子層容器或純網址
102
+ const formatLinkText = (text: string) => {
103
+ const firstRound = dropMenu.recentList.find(item => item.link === text);
104
+ if (firstRound) {
105
+ return formatLinkHTML(firstRound.icon, [firstRound.name]);
106
+ }
107
+ const targetItem = findMenuItemPathByLink(dropMenu.recentList, text);
108
+ if (targetItem) {
109
+ return formatLinkHTML(targetItem.icon, targetItem.nameMap);
110
+ }
111
+ return text;
112
+ };
97
113
 
98
- // 重新刷新元件
99
- const componentFresh = () => {
100
- const notify = () => {
101
- obj.gvc.notifyDataChange(dropMenu.id);
102
- obj.gvc.notifyDataChange(linkComp.id);
103
- };
104
- linkComp.loading = !linkComp.loading;
105
- dropMenu.loading = !dropMenu.loading;
106
- if (dropMenu.loading) {
107
- notify();
108
- } else {
109
- const si = setInterval(() => {
110
- const inputElement = obj.gvc.glitter.document.getElementById(dropMenu.elementClass);
111
- if (inputElement) {
112
- dropMenu.elementWidth = inputElement.clientWidth;
113
- notify();
114
- clearInterval(si);
115
- }
116
- }, 100);
117
- }
118
- };
114
+ // 重新刷新元件
115
+ const componentFresh = () => {
116
+ const notify = () => {
117
+ obj.gvc.notifyDataChange(dropMenu.id);
118
+ obj.gvc.notifyDataChange(linkComp.id);
119
+ };
120
+ linkComp.loading = !linkComp.loading;
121
+ dropMenu.loading = !dropMenu.loading;
122
+ if (dropMenu.loading) {
123
+ notify();
124
+ } else {
125
+ const si = setInterval(() => {
126
+ const inputElement = obj.gvc.glitter.document.getElementById(dropMenu.elementClass);
127
+ if (inputElement) {
128
+ dropMenu.elementWidth = inputElement.clientWidth;
129
+ notify();
130
+ clearInterval(si);
131
+ }
132
+ }, 100);
133
+ }
134
+ };
119
135
 
120
- // callback 完整事件
121
- const callbackEvent = (data: any) => {
122
- linkComp.text = data.link;
123
- obj.callback(data.link);
124
- componentFresh();
125
- };
136
+ // callback 完整事件
137
+ const callbackEvent = (data: any) => {
138
+ linkComp.text = data.link;
139
+ obj.callback(data.link);
140
+ componentFresh();
141
+ };
126
142
 
127
- // 新增 elementClass style
128
- obj.gvc.addStyle(`
143
+ // 新增 elementClass style
144
+ obj.gvc.addStyle(`
129
145
  #${dropMenu.elementClass} {
130
146
  margin-top: 8px;
131
147
  white-space: normal;
@@ -133,250 +149,263 @@ export class PathSelect {
133
149
  }
134
150
  `);
135
151
 
136
- console.log('========= 這是舊的路徑選擇元件 =========');
137
- return obj.gvc.bindView({
138
- bind: vm.id,
139
- view: () => {
140
- if (vm.loading) {
141
- return '';
142
- } else {
143
- let dataList = JSON.parse(JSON.stringify(dropMenu.recentList)) as MenuItem[];
144
- return html`${obj.title ? html` <div class="tx_normal fw-normal">${obj.title}</div>` : ``}
145
- <div style="position: relative">
146
- ${obj.gvc.bindView({
147
- bind: linkComp.id,
148
- view: () => {
149
- if (linkComp.loading) {
150
- return html` <div
151
- class="bgw-input border rounded-3"
152
- style="${linkComp.text.length > 0 ? '' : 'padding: 9.5px 12px;'} ${obj.style ?? ''}"
153
- id="${dropMenu.elementClass}"
154
- onclick="${obj.gvc.event(() => {
155
- componentFresh();
156
- })}"
157
- >
158
- ${linkComp.text.length > 0 ? formatLinkText(linkComp.text) : html`<span style="color: #777777">${obj.placeHolder}</span>`}
159
- </div>`;
160
- } else {
161
- return html`
162
- <div class="d-flex align-items-center" style="margin-top: 8px;">
163
- <input
164
- class="form-control"
165
- style="${obj.style ?? ''}"
166
- type="text"
167
- placeholder="${obj.placeHolder}"
168
- onchange="${obj.gvc.event((e) => {
169
- callbackEvent({ link: e.value });
170
- })}"
171
- oninput="${obj.gvc.event((e) => {
172
- if (obj.pattern) {
173
- const value = e.value;
174
- const regex = new RegExp(`[^${obj.pattern}]`, 'g');
175
- const validValue = value.replace(regex, '');
176
- if (value !== validValue) {
177
- e.value = validValue;
178
- }
179
- }
180
- })}"
181
- value="${linkComp.text}"
182
- ${obj.readonly ? `readonly` : ``}
183
- />
184
- <span style="margin: 0 0.75rem"
185
- ><i
186
- class="fa-solid fa-xmark text-dark cursor_pointer fs-5"
187
- onclick="${obj.gvc.event(() => {
188
- componentFresh();
189
- })}"
190
- ></i
191
- ></span>
192
- </div>
193
- `;
194
- }
195
- },
196
- divCreate: {},
197
- onCreate: () => {},
198
- })}
199
- ${obj.gvc.bindView({
200
- bind: dropMenu.id,
201
- view: () => {
202
- if (dropMenu.loading) {
203
- return html``;
204
- } else {
205
- let h1 = '';
206
- if (dropMenu.prevList.length > 0) {
207
- h1 += html` <div
208
- class="m-3 cursor_pointer"
209
- style="font-size: 16px; font-weight: 500; gap: 6px; line-height: 140%;"
210
- onclick=${obj.gvc.event(() => {
211
- dataList = dropMenu.prevList[dropMenu.prevList.length - 1];
212
- dropMenu.prevList.pop();
213
- dropMenu.recentParent.pop();
214
- dropMenu.search = '';
215
- obj.gvc.notifyDataChange(dropMenu.id);
216
- })}
217
- >
218
- <i class="fa-solid fa-chevron-left me-2 hoverF2"></i>
219
- <span>${dropMenu.recentParent[dropMenu.recentParent.length - 1]}</span>
220
- </div>
221
- <input
222
- class="form-control m-2"
223
- style="width: 92%"
224
- type="text"
225
- placeholder="搜尋"
226
- onchange="${obj.gvc.event((e) => {
227
- dropMenu.search = e.value;
228
- obj.gvc.notifyDataChange(dropMenu.id);
229
- })}"
230
- oninput="${obj.gvc.event((e) => {
231
- if (obj.pattern) {
232
- const value = e.value;
233
- const regex = new RegExp(`[^${obj.pattern}]`, 'g');
234
- const validValue = value.replace(regex, '');
235
- if (value !== validValue) {
236
- e.value = validValue;
237
- }
238
- }
239
- })}"
240
- value="${dropMenu.search}"
241
- />`;
242
- }
243
- let h2 = '';
244
- dataList
245
- .filter((tag) => {
246
- return tag.name.includes(dropMenu.search);
247
- })
248
- .map((tag) => {
249
- h2 += html`
250
- <div class="m-2" style="cursor:pointer;display: flex; align-items: center; justify-content: space-between;">
251
- <div
252
- class="w-100 p-1 link-item-container hoverF2 cursor_pointer text-wrap"
253
- onclick=${obj.gvc.event(() => {
254
- if (tag.link && tag.link.length > 0) {
255
- callbackEvent(tag);
256
- } else {
257
- dropMenu.prevList.push(dataList);
258
- dropMenu.recentParent.push(tag.name);
259
- tag.items && (dataList = tag.items);
260
- obj.gvc.notifyDataChange(dropMenu.id);
261
- }
262
- })}
263
- >
264
- <div style="min-width: 28px; height: 28px; display: flex; align-items: center; justify-content: center;">
265
- ${(() => {
266
- if (tag.icon.includes('https://')) {
267
- return html` <div
268
- style="
152
+ console.log('========= 這是舊的路徑選擇元件 =========');
153
+ return obj.gvc.bindView({
154
+ bind: vm.id,
155
+ view: () => {
156
+ if (vm.loading) {
157
+ return '';
158
+ } else {
159
+ let dataList = JSON.parse(JSON.stringify(dropMenu.recentList)) as MenuItem[];
160
+ return html`${obj.title ? html` <div class="tx_normal fw-normal">${obj.title}</div>` : ``}
161
+ <div style="position: relative">
162
+ ${obj.gvc.bindView({
163
+ bind: linkComp.id,
164
+ view: () => {
165
+ if (linkComp.loading) {
166
+ return html` <div
167
+ class="bgw-input border rounded-3"
168
+ style="${linkComp.text.length > 0 ? '' : 'padding: 9.5px 12px;'} ${obj.style ?? ''}"
169
+ id="${dropMenu.elementClass}"
170
+ onclick="${obj.gvc.event(() => {
171
+ componentFresh();
172
+ })}"
173
+ >
174
+ ${linkComp.text.length > 0
175
+ ? formatLinkText(linkComp.text)
176
+ : html`<span style="color: #777777">${obj.placeHolder}</span>`}
177
+ </div>`;
178
+ } else {
179
+ return html`
180
+ <div class="d-flex align-items-center" style="margin-top: 8px;">
181
+ <input
182
+ class="form-control"
183
+ style="${obj.style ?? ''}"
184
+ type="text"
185
+ placeholder="${obj.placeHolder}"
186
+ onchange="${obj.gvc.event(e => {
187
+ callbackEvent({ link: e.value });
188
+ })}"
189
+ oninput="${obj.gvc.event(e => {
190
+ if (obj.pattern) {
191
+ const value = e.value;
192
+ const regex = new RegExp(`[^${obj.pattern}]`, 'g');
193
+ const validValue = value.replace(regex, '');
194
+ if (value !== validValue) {
195
+ e.value = validValue;
196
+ }
197
+ }
198
+ })}"
199
+ value="${linkComp.text}"
200
+ ${obj.readonly ? `readonly` : ``}
201
+ />
202
+ <span style="margin: 0 0.75rem"
203
+ ><i
204
+ class="fa-solid fa-xmark text-dark cursor_pointer fs-5"
205
+ onclick="${obj.gvc.event(() => {
206
+ componentFresh();
207
+ })}"
208
+ ></i
209
+ ></span>
210
+ </div>
211
+ `;
212
+ }
213
+ },
214
+ divCreate: {},
215
+ onCreate: () => {},
216
+ })}
217
+ ${obj.gvc.bindView({
218
+ bind: dropMenu.id,
219
+ view: () => {
220
+ if (dropMenu.loading) {
221
+ return html``;
222
+ } else {
223
+ let h1 = '';
224
+ if (dropMenu.prevList.length > 0) {
225
+ h1 += html` <div
226
+ class="m-3 cursor_pointer"
227
+ style="font-size: 16px; font-weight: 500; gap: 6px; line-height: 140%;"
228
+ onclick=${obj.gvc.event(() => {
229
+ dataList = dropMenu.prevList[dropMenu.prevList.length - 1];
230
+ dropMenu.prevList.pop();
231
+ dropMenu.recentParent.pop();
232
+ dropMenu.search = '';
233
+ obj.gvc.notifyDataChange(dropMenu.id);
234
+ })}
235
+ >
236
+ <i class="fa-solid fa-chevron-left me-2 hoverF2"></i>
237
+ <span>${dropMenu.recentParent[dropMenu.recentParent.length - 1]}</span>
238
+ </div>
239
+ <input
240
+ class="form-control m-2"
241
+ style="width: calc(100% - 16.875px)"
242
+ type="text"
243
+ placeholder="搜尋"
244
+ onchange="${obj.gvc.event(e => {
245
+ dropMenu.search = e.value;
246
+ obj.gvc.notifyDataChange(dropMenu.id);
247
+ })}"
248
+ oninput="${obj.gvc.event(e => {
249
+ if (obj.pattern) {
250
+ const value = e.value;
251
+ const regex = new RegExp(`[^${obj.pattern}]`, 'g');
252
+ const validValue = value.replace(regex, '');
253
+ if (value !== validValue) {
254
+ e.value = validValue;
255
+ }
256
+ }
257
+ })}"
258
+ value="${dropMenu.search}"
259
+ />`;
260
+ }
261
+ let h2 = '';
262
+ dataList
263
+ .filter(tag => {
264
+ return tag.name.includes(dropMenu.search);
265
+ })
266
+ .map(tag => {
267
+ h2 += html`
268
+ <div
269
+ class="m-2"
270
+ style="cursor:pointer;display: flex; align-items: center; justify-content: space-between;"
271
+ >
272
+ <div
273
+ class="w-100 p-1 link-item-container hoverF2 cursor_pointer text-wrap"
274
+ onclick=${obj.gvc.event(() => {
275
+ if (tag.link && tag.link.length > 0) {
276
+ callbackEvent(tag);
277
+ } else {
278
+ dropMenu.prevList.push(dataList);
279
+ dropMenu.recentParent.push(tag.name);
280
+ tag.items && (dataList = tag.items);
281
+ obj.gvc.notifyDataChange(dropMenu.id);
282
+ }
283
+ })}
284
+ >
285
+ <div
286
+ style="min-width: 28px; height: 28px; display: flex; align-items: center; justify-content: center;"
287
+ >
288
+ ${(() => {
289
+ if (tag.icon.includes('https://')) {
290
+ return html` <div
291
+ style="
269
292
  width: 25px; height: 25px;
270
293
  background-image: url('${tag.icon}');
271
294
  background-position: center;
272
295
  background-size: cover;
273
296
  background-repeat: no-repeat;
274
297
  "
275
- ></div>`;
276
- }
277
- return html`<i class="${tag.icon.length > 0 ? tag.icon : 'fa-regular fa-image'}"></i>`;
278
- })()}
279
- </div>
280
- ${tag.name}
281
- </div>
282
- <div
283
- class="py-1 px-3 hoverF2 ${tag.items && tag.items.length > 0 ? '' : 'd-none'}"
284
- onclick=${obj.gvc.event(() => {
285
- dropMenu.prevList.push(dataList);
286
- dropMenu.recentParent.push(tag.name);
287
- tag.items && (dataList = tag.items);
288
- obj.gvc.notifyDataChange(dropMenu.id);
289
- })}
290
- >
291
- <i class="fa-solid fa-chevron-right cursor_pointer"></i>
292
- </div>
293
- </div>
294
- `;
295
- });
296
- return html`
297
- <div class="border border-2 rounded-2 p-2" style="width: ${dropMenu.elementWidth}px;">
298
- ${h1}
299
- <div style="overflow-y: auto; max-height: 42.5vh;">${h2}</div>
300
- </div>
301
- `;
302
- }
303
- },
298
+ ></div>`;
299
+ }
300
+ return html`<i
301
+ class="${tag.icon.length > 0 ? tag.icon : 'fa-regular fa-image'}"
302
+ ></i>`;
303
+ })()}
304
+ </div>
305
+ ${tag.name}
306
+ </div>
307
+ <div
308
+ class="py-1 px-3 hoverF2 ${tag.items && tag.items.length > 0 ? '' : 'd-none'}"
309
+ onclick=${obj.gvc.event(() => {
310
+ dropMenu.prevList.push(dataList);
311
+ dropMenu.recentParent.push(tag.name);
312
+ tag.items && (dataList = tag.items);
313
+ obj.gvc.notifyDataChange(dropMenu.id);
314
+ })}
315
+ >
316
+ <i class="fa-solid fa-chevron-right cursor_pointer"></i>
317
+ </div>
318
+ </div>
319
+ `;
320
+ });
321
+ return html`
322
+ <div class="border border-2 rounded-2 p-2" style="width: ${dropMenu.elementWidth}px;">
323
+ ${h1}
324
+ <div style="overflow-y: auto; max-height: 42.5vh;">${h2}</div>
325
+ </div>
326
+ `;
327
+ }
328
+ },
304
329
 
305
- divCreate: {
306
- style: 'position: absolute; top: 44px; left: 0; z-index: 1; background-color: #fff;',
307
- },
308
- })}
309
- </div>`;
310
- }
311
- },
312
- divCreate: {},
313
- onCreate: () => {
314
- if (vm.loading) {
315
- const acticleList: MenuItem[] = [];
316
- const collectionList: MenuItem[] = [];
317
- const productList: MenuItem[] = [];
318
-
319
- Promise.all([
320
- new Promise<void>((resolve) => {
321
- ApiShop.getCollection().then((data: any) => {
322
- setCollectionPath(collectionList, data.response && data.response.value.length > 0 ? data.response.value : []);
323
- resolve();
324
- });
325
- }),
326
- new Promise<void>((resolve) => {
327
- ApiShop.getProduct({ page: 0, limit: 50000, search: '' }).then((data: any) => {
328
- if (data.result) {
329
- (data.response.data || []).map((item: { content: { id: string; title: string; preview_image: string[] } }) => {
330
- const { id, title, preview_image } = item.content;
331
- const icon = preview_image && preview_image[0] ? preview_image[0] : '';
332
- productList.push({
333
- name: title,
334
- icon: icon,
335
- link: `/products?product_id=${id}`,
336
- });
337
- });
338
- resolve();
339
- }
340
- });
341
- }),
342
- new Promise<void>((resolve) => {
343
- ApiPost.getManagerPost({ page: 0, limit: 20, type: 'article' }).then((data) => {
344
- if (data.result) {
345
- data.response.data.map((item: { content: { name: string; tag: string } }) => {
346
- const { name, tag } = item.content;
347
- if (name) {
348
- acticleList.push({ name: name, icon: '', link: `/pages/${tag}` });
349
- }
350
- });
351
- }
352
- resolve();
353
- });
354
- }),
355
- ]).then(() => {
356
- dropMenu.recentList = [
357
- { name: '首頁', icon: 'fa-regular fa-house', link: '/index' },
358
- { name: '所有商品', icon: 'fa-regular fa-tag', link: '/all-product', items: productList },
359
- { name: '商品分類', icon: 'fa-regular fa-tags', link: '', items: collectionList },
360
- { name: '網誌文章', icon: 'fa-regular fa-newspaper', link: '/blogs', items: acticleList },
330
+ divCreate: {
331
+ style: 'position: absolute; top: 44px; left: 0; z-index: 1; background-color: #fff;',
332
+ },
333
+ })}
334
+ </div>`;
335
+ }
336
+ },
337
+ divCreate: {},
338
+ onCreate: () => {
339
+ if (vm.loading) {
340
+ const acticleList: MenuItem[] = [];
341
+ const collectionList: MenuItem[] = [];
342
+ const productList: MenuItem[] = [];
361
343
 
362
- ].filter((menu) => {
363
- if (menu.items === undefined) return true;
364
- return menu.items.length > 0 || menu.link.length > 0;
365
- });
366
- vm.loading = false;
367
- obj.gvc.notifyDataChange(vm.id);
368
- });
344
+ Promise.all([
345
+ new Promise<void>(resolve => {
346
+ ApiShop.getCollection().then((data: any) => {
347
+ setCollectionPath(
348
+ collectionList,
349
+ data.response && data.response.value.length > 0 ? data.response.value : []
350
+ );
351
+ resolve();
352
+ });
353
+ }),
354
+ new Promise<void>(resolve => {
355
+ ApiShop.getProduct({ page: 0, limit: 50000, search: '' }).then((data: any) => {
356
+ if (data.result) {
357
+ (data.response.data || []).map(
358
+ (item: { content: { id: string; title: string; preview_image: string[] } }) => {
359
+ const { id, title, preview_image } = item.content;
360
+ const icon = preview_image && preview_image[0] ? preview_image[0] : '';
361
+ productList.push({
362
+ name: title,
363
+ icon: icon,
364
+ link: `/products?product_id=${id}`,
365
+ });
366
+ }
367
+ );
368
+ resolve();
369
369
  }
370
- },
371
- });
372
- }
370
+ });
371
+ }),
372
+ new Promise<void>(resolve => {
373
+ ApiPost.getManagerPost({ page: 0, limit: 20, type: 'article' }).then(data => {
374
+ if (data.result) {
375
+ data.response.data.map((item: { content: { name: string; tag: string } }) => {
376
+ const { name, tag } = item.content;
377
+ if (name) {
378
+ acticleList.push({ name: name, icon: '', link: `/pages/${tag}` });
379
+ }
380
+ });
381
+ }
382
+ resolve();
383
+ });
384
+ }),
385
+ ]).then(() => {
386
+ dropMenu.recentList = [
387
+ { name: '首頁', icon: 'fa-regular fa-house', link: '/index' },
388
+ { name: '所有商品', icon: 'fa-regular fa-tag', link: '/all-product', items: productList },
389
+ { name: '商品分類', icon: 'fa-regular fa-tags', link: '', items: collectionList },
390
+ { name: '網誌文章', icon: 'fa-regular fa-newspaper', link: '/blogs', items: acticleList },
391
+ ].filter(menu => {
392
+ if (menu.items === undefined) return true;
393
+ return menu.items.length > 0 || menu.link.length > 0;
394
+ });
395
+ vm.loading = false;
396
+ obj.gvc.notifyDataChange(vm.id);
397
+ });
398
+ }
399
+ },
400
+ });
401
+ }
373
402
 
374
- static randomString(max: number) {
375
- let possible = 'abcdefghijklmnopqrstuvwxyz0123456789';
376
- let text = possible.charAt(Math.floor(Math.random() * (possible.length - 10)));
377
- for (let i = 1; i < max; i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
378
- return text;
379
- }
403
+ static randomString(max: number) {
404
+ let possible = 'abcdefghijklmnopqrstuvwxyz0123456789';
405
+ let text = possible.charAt(Math.floor(Math.random() * (possible.length - 10)));
406
+ for (let i = 1; i < max; i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
407
+ return text;
408
+ }
380
409
  }
381
410
 
382
411
  (window as any).glitter.setModule(import.meta.url, PathSelect);