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
@@ -1,691 +1,704 @@
1
- import {GVC} from '../glitterBundle/GVController.js';
2
- import {BgWidget} from '../backend-manager/bg-widget.js';
3
- import {Tool} from '../modules/tool.js';
4
- import {ApiUser} from '../glitter-base/route/user.js';
5
- import {EditorElem} from '../glitterBundle/plugins/editor-elem.js';
6
- import {ProductAi} from "./ai-generator/product-ai.js";
7
- import {imageLibrary} from "../modules/image-library.js";
8
- import {ShareDialog} from "../glitterBundle/dialog/ShareDialog.js";
9
- import {LanguageBackend} from "./language-backend.js";
1
+ import { GVC } from '../glitterBundle/GVController.js';
2
+ import { BgWidget } from '../backend-manager/bg-widget.js';
3
+ import { Tool } from '../modules/tool.js';
4
+ import { ApiUser } from '../glitter-base/route/user.js';
5
+ import { LanguageBackend } from './language-backend.js';
10
6
 
11
7
  const html = String.raw;
12
8
 
13
9
  export class AutoReply {
14
- public static main(gvc: GVC, widget: any) {
15
- const vm: {
16
- type: 'list' | 'replace';
17
- data: any;
18
- dataList: any;
19
- query?: string;
20
- tag: string;
21
- } = {
22
- type: 'list',
23
- data: {},
24
- dataList: undefined,
25
- tag: '',
26
- query: '',
27
- };
28
- const glitter = gvc.glitter;
29
- const id = glitter.getUUID();
30
- return gvc.bindView(() => {
31
- return {
32
- bind: id,
33
- view: () => {
34
- if (vm.type === 'replace') {
35
- return AutoReply.autoSendEmail(
36
- gvc,
37
- vm.tag,
38
- () => {
39
- vm.type = 'list';
40
- gvc.notifyDataChange(id);
41
- },
42
- widget
10
+ public static main(gvc: GVC, widget: any) {
11
+ const vm: {
12
+ type: 'list' | 'replace';
13
+ data: any;
14
+ dataList: any;
15
+ query?: string;
16
+ tag: string;
17
+ } = {
18
+ type: 'list',
19
+ data: {},
20
+ dataList: undefined,
21
+ tag: '',
22
+ query: '',
23
+ };
24
+ const glitter = gvc.glitter;
25
+ const id = glitter.getUUID();
26
+ return gvc.bindView(() => {
27
+ return {
28
+ bind: id,
29
+ view: () => {
30
+ if (vm.type === 'replace') {
31
+ return AutoReply.autoSendEmail(
32
+ gvc,
33
+ vm.tag,
34
+ () => {
35
+ vm.type = 'list';
36
+ gvc.notifyDataChange(id);
37
+ },
38
+ widget
39
+ );
40
+ }
41
+ let vmi: any = undefined;
42
+
43
+ function getDatalist() {
44
+ return vm.dataList.map((dd: any) => {
45
+ return [
46
+ {
47
+ key: '發送時間',
48
+ value: dd.tag_name,
49
+ },
50
+ {
51
+ key: '標題',
52
+ value: Tool.truncateString(dd.title, 32),
53
+ },
54
+ {
55
+ key: '最後更新時間',
56
+ value: dd.updated_time ? gvc.glitter.ut.dateFormat(dd.updated_time, 'yyyy-MM-dd') : '系統預設',
57
+ },
58
+ {
59
+ key: '狀態',
60
+ value: gvc.bindView(() => {
61
+ const id2 = gvc.glitter.getUUID();
62
+ return {
63
+ bind: id2,
64
+ view: () => {
65
+ return BgWidget.switchTextButton(
66
+ gvc,
67
+ dd.toggle,
68
+ {
69
+ left: dd.toggle ? '啟用' : '關閉',
70
+ },
71
+ () => {
72
+ ApiUser.getPublicConfig(dd.tag, 'manager').then(res => {
73
+ dd.toggle = !dd.toggle;
74
+ res.response.value = res.response.value || {};
75
+ res.response.value.updated_time = new Date();
76
+ res.response.value.toggle = dd.toggle;
77
+ ApiUser.setPublicConfig({
78
+ key: dd.tag,
79
+ value: res.response.value,
80
+ user_id: 'manager',
81
+ }).then(() => {
82
+ gvc.notifyDataChange(id2);
83
+ });
84
+ });
85
+ }
43
86
  );
44
- }
45
- let vmi: any = undefined;
87
+ },
88
+ divCreate: {
89
+ elem: 'div',
90
+ style: 'gap:4px;',
91
+ class: 'd-flex',
92
+ option: [
93
+ {
94
+ key: 'onclick',
95
+ value: gvc.event((e, event) => {
96
+ event.stopPropagation();
97
+ }),
98
+ },
99
+ ],
100
+ },
101
+ };
102
+ }),
103
+ },
104
+ ];
105
+ });
106
+ }
46
107
 
47
- function getDatalist() {
48
- return vm.dataList.map((dd: any) => {
49
- return [
50
- {
51
- key: '發送時間',
52
- value: dd.tag_name,
53
- },
54
- {
55
- key: '標題',
56
- value: Tool.truncateString(dd.title, 32),
57
- },
58
- {
59
- key: '最後更新時間',
60
- value: dd.updated_time ? gvc.glitter.ut.dateFormat(dd.updated_time, 'yyyy-MM-dd') : '系統預設',
61
- },
62
- {
63
- key: '狀態',
64
- value: gvc.bindView(() => {
65
- const id2 = gvc.glitter.getUUID();
66
- return {
67
- bind: id2,
68
- view: () => {
69
- return BgWidget.switchTextButton(
70
- gvc,
71
- dd.toggle,
72
- {
73
- left: dd.toggle ? '啟用' : '關閉',
74
- },
75
- () => {
76
- ApiUser.getPublicConfig(dd.tag, 'manager').then((res) => {
77
- dd.toggle = !dd.toggle;
78
- res.response.value = res.response.value || {};
79
- res.response.value.updated_time = new Date();
80
- res.response.value.toggle = dd.toggle;
81
- ApiUser.setPublicConfig({
82
- key: dd.tag,
83
- value: res.response.value,
84
- user_id: 'manager',
85
- }).then(() => {
86
- gvc.notifyDataChange(id2);
87
- });
88
- });
89
- }
90
- );
91
- },
92
- divCreate: {
93
- elem: 'div',
94
- style: 'gap:4px;',
95
- class: 'd-flex',
96
- option: [
97
- {
98
- key: 'onclick',
99
- value: gvc.event((e, event) => {
100
- event.stopPropagation();
101
- }),
102
- },
103
- ],
104
- },
105
- };
106
- }),
107
- },
108
- ];
108
+ return BgWidget.container(html`
109
+ <div class="title-container">
110
+ ${BgWidget.title('自動寄件')}
111
+ <div class="flex-fill"></div>
112
+ </div>
113
+ ${BgWidget.container(
114
+ BgWidget.mainCard(
115
+ BgWidget.tableV3({
116
+ gvc: gvc,
117
+ getData: async vmk => {
118
+ const appData = await ApiUser.getPublicConfig('store-information', 'manager');
119
+ vmi = vmk;
120
+ vmi.pageSize = Math.ceil(1);
121
+ vm.dataList = await Promise.all(
122
+ [
123
+ 'auto-email-shipment-arrival',
124
+ 'auto-email-shipment',
125
+ 'auto-email-order-create',
126
+ 'auto-email-payment-successful',
127
+ 'proof-purchase',
128
+ // 'auto-email-order-cancel-success',
129
+ // 'auto-email-order-cancel-false',
130
+ 'auto-email-birthday',
131
+ 'auto-email-welcome',
132
+ 'auto-email-verify',
133
+ 'auto-email-forget',
134
+ 'get-customer-message',
135
+ ].map(b => {
136
+ return new Promise(async resolve => {
137
+ const data = await AutoReply.getDefCompare(b);
138
+ data.title = data.title.replace(
139
+ /@\{\{app_name\}\}/g,
140
+ (appData.response.value && appData.response.value.shop_name) || '商店名稱'
141
+ );
142
+ resolve(data);
109
143
  });
110
- }
111
-
112
- return BgWidget.container(
113
- html`
114
- <div class="title-container">
115
- ${BgWidget.title('自動寄件')}
116
- <div class="flex-fill"></div>
117
- </div>
118
- ${BgWidget.container(
119
- BgWidget.mainCard(
120
- BgWidget.tableV3({
121
- gvc: gvc,
122
- getData: async (vmk) => {
123
- const appData = await ApiUser.getPublicConfig('store-information', 'manager');
124
- vmi = vmk;
125
- vmi.pageSize = Math.ceil(1);
126
- vm.dataList = await Promise.all([
127
- 'auto-email-shipment-arrival',
128
- 'auto-email-shipment',
129
- 'auto-email-order-create',
130
- 'auto-email-payment-successful',
131
- 'proof-purchase',
132
- // 'auto-email-order-cancel-success',
133
- // 'auto-email-order-cancel-false',
134
- 'auto-email-birthday',
135
- 'auto-email-welcome',
136
- 'auto-email-verify',
137
- 'auto-email-forget',
138
- 'get-customer-message',
139
- ].map((b)=>{
140
- return new Promise(async (resolve)=>{
141
- const data=await AutoReply.getDefCompare(b)
142
- data.title=data.title.replace(
143
- /@\{\{app_name\}\}/g,
144
- (appData.response.value && appData.response.value.shop_name) || '商店名稱'
145
- )
146
- resolve(data)
147
- })
148
- }))
149
- vmi.originalData = vm.dataList;
150
- vmi.tableData = getDatalist();
151
- vmi.loading = false;
152
- vmi.callback();
153
- },
154
- rowClick: (data, index) => {
155
- vm.tag = vm.dataList[index].tag;
156
- vm.type = 'replace';
157
- gvc.notifyDataChange(id);
158
- },
159
- filter: [],
160
- })
161
- )
162
- )}
163
- ${BgWidget.mbContainer(240)}
164
- `
144
+ })
165
145
  );
166
- },
167
- };
168
- });
169
- }
146
+ vmi.originalData = vm.dataList;
147
+ vmi.tableData = getDatalist();
148
+ vmi.loading = false;
149
+ vmi.callback();
150
+ },
151
+ rowClick: (data, index) => {
152
+ vm.tag = vm.dataList[index].tag;
153
+ vm.type = 'replace';
154
+ gvc.notifyDataChange(id);
155
+ },
156
+ filter: [],
157
+ })
158
+ )
159
+ )}
160
+ ${BgWidget.mbContainer(240)}
161
+ `);
162
+ },
163
+ };
164
+ });
165
+ }
170
166
 
171
- public static autoSendEmail(gvc: GVC, tag: string, back: () => void, widget: any) {
172
- let vm: {
173
- data: any;
174
- loading: boolean;
175
- language: any,
176
- } = {
177
- data: '',
178
- loading: true,
179
- language: (window.parent as any).store_info.language_setting.def
180
- };
167
+ public static autoSendEmail(gvc: GVC, tag: string, back: () => void, widget: any) {
168
+ let vm: {
169
+ data: any;
170
+ loading: boolean;
171
+ language: any;
172
+ } = {
173
+ data: '',
174
+ loading: true,
175
+ language: (window.parent as any).store_info.language_setting.def,
176
+ };
181
177
 
182
- const id = gvc.glitter.getUUID()
178
+ const id = gvc.glitter.getUUID();
183
179
 
184
- AutoReply.getDefCompare(tag).then((dd) => {
185
- vm.data = dd;
186
- vm.loading = false;
187
- gvc.notifyDataChange(id);
188
- })
189
- return gvc.bindView(() => {
190
- function refresh() {
191
- gvc.notifyDataChange(id)
192
- }
180
+ AutoReply.getDefCompare(tag).then(dd => {
181
+ vm.data = dd;
182
+ vm.loading = false;
183
+ gvc.notifyDataChange(id);
184
+ });
185
+ return gvc.bindView(() => {
186
+ function refresh() {
187
+ gvc.notifyDataChange(id);
188
+ }
193
189
 
194
- return {
195
- bind: id,
196
- view: () => {
197
- if(vm.loading){
198
- return BgWidget.spinner()
199
- }
200
- console.log(`vm.data->`,vm.data)
201
- if(!vm.data[vm.language]){
202
- vm.data[vm.language]={
203
- title:vm.data.title,
204
- name:vm.data.name,
205
- content:vm.data.content,
206
- }
207
- }
190
+ return {
191
+ bind: id,
192
+ view: () => {
193
+ if (vm.loading) {
194
+ return BgWidget.spinner();
195
+ }
208
196
 
209
- const language_data=vm.data[vm.language];
210
- return html` ${BgWidget.container(
211
- [
212
- html`
213
- <div class="title-container">
214
- ${BgWidget.goBack(
215
- gvc.event(() => {
216
- back();
217
- })
218
- )}${BgWidget.title(
219
- vm.data.tag_name || '信件設定'
220
- )}
221
- <div class="flex-fill"></div>
222
- ${LanguageBackend.switchBtn({
223
- gvc: gvc,
224
- language: vm.language,
225
- callback: (language) => {
226
- vm.language = language;
227
- refresh()
228
- },
229
- })}
230
- </div>`,
231
- BgWidget.mbContainer(24),
232
- BgWidget.alertInfo('可使用模板字串,信件將在寄送時自動填入相關數值', ['商家名稱:@{{app_name}}', '訂單號碼:@{{訂單號碼}}', '會員姓名:@{{user_name}}'], {
233
- class: 'mb-3',
234
- style: '',
235
- }),
236
- BgWidget.mainCard(
237
- gvc.bindView(() => {
238
- const id = gvc.glitter.getUUID();
239
- ;
240
- return {
241
- bind: id,
242
- view: () => {
243
- if (vm.loading) {
244
- return BgWidget.spinner()
245
- }
246
- return [
247
- BgWidget.editeInput({
248
- gvc: gvc,
249
- title: html`寄件者名稱` + BgWidget.languageInsignia(vm.language),
250
- default: language_data.name || '',
251
- callback: (text) => {
252
- language_data.name = text;
253
- },
254
- placeHolder: '請輸入寄件者名稱',
255
- }),
256
- BgWidget.editeInput({
257
- gvc: gvc,
258
- title: html`信件標題` + BgWidget.languageInsignia(vm.language),
259
- default: language_data.title || '',
260
- callback: (text) => {
261
- language_data.title = text;
262
- },
263
- placeHolder: '請輸入信件標題',
264
- }),
265
- html`
266
- <div class="tx_normal fw-normal mb-2">
267
- 信件內容${BgWidget.languageInsignia(vm.language)}
268
- </div>`,
269
- gvc.bindView(
270
- (() => {
271
- const id = gvc.glitter.getUUID();
272
- return {
273
- bind: id,
274
- view: () => {
197
+ if (!vm.data[vm.language]) {
198
+ vm.data[vm.language] = {
199
+ title: vm.data.title,
200
+ name: vm.data.name,
201
+ content: vm.data.content,
202
+ };
203
+ }
275
204
 
276
- try {
277
- return BgWidget.richTextEditor({
278
- gvc: gvc,
279
- content: language_data.content ?? '',
280
- callback: (content) => {
281
- language_data.content=content
282
- },
283
- title: '內容編輯',
284
- quick_insert:(()=>{
285
- switch (tag){
286
- case 'auto-email-payment-successful':
287
- return [
288
- {
289
- title:'商家名稱',
290
- value:'@{{app_name}}'
291
- },
292
- {
293
- title:'訂單號碼',
294
- value:'@{{訂單號碼}}'
295
- },
296
- {
297
- title:'會員姓名',
298
- value:'@{{user_name}}'
299
- },
300
- {
301
- title:'訂單金額',
302
- value:'@{{訂單金額}}'
303
- },
304
- {
305
- title:'姓名',
306
- value:'@{{姓名}}'
307
- },
308
- {
309
- title:'電話',
310
- value:'@{{電話}}'
311
- },
312
- {
313
- title:'地址',
314
- value:'@{{地址}}'
315
- },
316
- {
317
- title:'信箱',
318
- value:'@{{信箱}}'
319
- }
320
- ]
321
- default:
322
- return []
323
- }
324
- })()
325
- })
326
- } catch (e) {
327
- console.log(`error=>`, e)
328
- return ``
329
- }
330
- },
331
- divCreate: {},
332
- };
333
- })()
334
- )
335
- ].join('');
336
- },
337
- };
338
- })
339
- ),
340
- BgWidget.mbContainer(240),
341
- html`
342
- <div class="update-bar-container">
343
- ${BgWidget.cancel(
344
- gvc.event(() => {
345
- back();
346
- })
347
- )}
348
- ${BgWidget.save(
349
- gvc.event(() => {
350
- widget.event('loading', {title: '儲存中'});
351
- vm.data.updated_time = new Date();
352
- ApiUser.setPublicConfig({
353
- key: tag,
354
- value: vm.data,
355
- user_id: 'manager',
356
- }).then(() => {
357
- setTimeout(() => {
358
- widget.event('loading', {visible: false});
359
- widget.event('success', {title: '儲存成功'});
360
- }, 1000);
361
- });
362
- })
363
- )}
364
- </div>`,
365
- ].join('')
366
- )}`;
367
- },
368
- divCreate: {}
369
- }
370
- })
371
- }
205
+ const language_data = vm.data[vm.language];
206
+ return html` ${BgWidget.container(
207
+ [
208
+ html` <div class="title-container">
209
+ ${[
210
+ BgWidget.goBack(
211
+ gvc.event(() => {
212
+ back();
213
+ })
214
+ ),
215
+ BgWidget.title(vm.data.tag_name || '信件設定'),
216
+ html`<div class="ms-2">
217
+ ${BgWidget.questionButton(
218
+ gvc.event(() => {
219
+ BgWidget.dialog({
220
+ gvc,
221
+ title: '模板字串使用提示',
222
+ innerHTML: () => {
223
+ return BgWidget.alertInfo(
224
+ '可使用模板字串,信件將在寄送時自動填入相關數值',
225
+ BgWidget.richTextQuickList.map(item => `${item.title}: ${item.value}`),
226
+ {
227
+ class: 'mb-3',
228
+ style: '',
229
+ }
230
+ );
231
+ },
232
+ });
233
+ })
234
+ )}
235
+ </div>`,
236
+ ].join('')}
237
+ <div class="flex-fill"></div>
238
+ ${LanguageBackend.switchBtn({
239
+ gvc: gvc,
240
+ language: vm.language,
241
+ callback: language => {
242
+ vm.language = language;
243
+ refresh();
244
+ },
245
+ })}
246
+ </div>`,
247
+ BgWidget.mbContainer(24),
248
+ BgWidget.mainCard(
249
+ gvc.bindView(() => {
250
+ const id = gvc.glitter.getUUID();
251
+ return {
252
+ bind: id,
253
+ view: () => {
254
+ if (vm.loading) {
255
+ return BgWidget.spinner();
256
+ }
257
+ return [
258
+ BgWidget.editeInput({
259
+ gvc: gvc,
260
+ title: html`寄件者名稱` + BgWidget.languageInsignia(vm.language),
261
+ default: language_data.name || '',
262
+ callback: text => {
263
+ language_data.name = text;
264
+ },
265
+ placeHolder: '請輸入寄件者名稱',
266
+ }),
267
+ BgWidget.editeInput({
268
+ gvc: gvc,
269
+ title: html`信件標題` + BgWidget.languageInsignia(vm.language),
270
+ default: language_data.title || '',
271
+ callback: text => {
272
+ language_data.title = text;
273
+ },
274
+ placeHolder: '請輸入信件標題',
275
+ }),
276
+ html` <div class="tx_normal fw-normal mb-2">
277
+ 信件內容${BgWidget.languageInsignia(vm.language)}
278
+ </div>`,
279
+ gvc.bindView(
280
+ (() => {
281
+ const id = gvc.glitter.getUUID();
282
+ return {
283
+ bind: id,
284
+ view: () => {
285
+ try {
286
+ return BgWidget.richTextEditor({
287
+ gvc: gvc,
288
+ content: language_data.content ?? '',
289
+ callback: content => {
290
+ language_data.content = content;
291
+ },
292
+ title: '內容編輯',
293
+ quick_insert:
294
+ ['get-customer-message', 'proof-purchase'].includes(tag) ||
295
+ tag.includes('auto-email')
296
+ ? BgWidget.richTextQuickList
297
+ : [],
298
+ });
299
+ } catch (e) {
300
+ console.error(`error=>`, e);
301
+ return '';
302
+ }
303
+ },
304
+ divCreate: {},
305
+ };
306
+ })()
307
+ ),
308
+ ].join('');
309
+ },
310
+ };
311
+ })
312
+ ),
313
+ BgWidget.mbContainer(240),
314
+ html` <div class="update-bar-container">
315
+ ${BgWidget.cancel(
316
+ gvc.event(() => {
317
+ back();
318
+ })
319
+ )}
320
+ ${BgWidget.save(
321
+ gvc.event(() => {
322
+ widget.event('loading', { title: '儲存中' });
323
+ vm.data.updated_time = new Date();
324
+ ApiUser.setPublicConfig({
325
+ key: tag,
326
+ value: vm.data,
327
+ user_id: 'manager',
328
+ }).then(() => {
329
+ setTimeout(() => {
330
+ widget.event('loading', { visible: false });
331
+ widget.event('success', { title: '儲存成功' });
332
+ }, 1000);
333
+ });
334
+ })
335
+ )}
336
+ </div>`,
337
+ ].join('')
338
+ )}`;
339
+ },
340
+ divCreate: {},
341
+ };
342
+ });
343
+ }
372
344
 
373
- public static async getDefCompare(tag: string) {
374
- const dataList: any = [
375
- {
376
- tag: 'auto-email-shipment',
377
- tag_name: '商品出貨',
378
- name: '@{{app_name}}',
379
- title: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 出貨中',
380
- content: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 出貨中',
381
- toggle: true,
382
- },
383
- {
384
- tag: 'auto-email-shipment-arrival',
385
- tag_name: '商品到貨',
386
- name: '@{{app_name}}',
387
- title: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 已到達',
388
- content: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 已到達',
389
- toggle: true,
390
- },
391
- {
392
- tag: 'auto-email-order-create',
393
- tag_name: '訂單成立',
394
- name: '@{{app_name}}',
395
- title: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已成立',
396
- content: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已成立',
397
- toggle: true,
398
- },
399
- {
400
- tag: 'auto-email-payment-successful',
401
- tag_name: '訂單付款成功',
402
- name: '@{{app_name}}',
403
- title: '[@{{app_name}}] #@{{訂單號碼}} 付款狀態 更新為: 已付款',
404
- content: '[@{{app_name}}] #@{{訂單號碼}} 付款狀態 更新為: 已付款',
405
- toggle: true,
406
- },
407
- {
408
- tag: 'proof-purchase',
409
- tag_name: '訂單待核款',
410
- name: '@{{app_name}}',
411
- title: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已進入待核款',
412
- content: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已進入待核款',
413
- toggle: true,
414
- },
415
- {
416
- tag: 'auto-email-order-cancel-success',
417
- tag_name: '取消訂單成功',
418
- name: '@{{app_name}}',
419
- title: '[@{{app_name}}] 您已成功取消訂單 #@{{訂單號碼}}',
420
- content: '[@{{app_name}}] 您已成功取消訂單 #@{{訂單號碼}}',
421
- toggle: true,
422
- },
423
- {
424
- tag: 'auto-email-order-cancel-false',
425
- tag_name: '取消訂單失敗',
426
- name: '@{{app_name}}',
427
- title: '[@{{app_name}}] 取消訂單申請 #@{{訂單號碼}} 已失敗',
428
- content: '[@{{app_name}}] 取消訂單申請 #@{{訂單號碼}} 已失敗',
429
- toggle: true,
430
- },
431
- {
432
- tag: 'auto-email-birthday',
433
- tag_name: '生日祝福',
434
- name: '@{{app_name}}',
435
- title: '[@{{app_name}}] [@{{user_name}}] 今天是您一年一度的大日子!祝您生日快樂!',
436
- content: '[@{{app_name}}] [@{{user_name}}] 今天是您一年一度的大日子!祝您生日快樂!',
437
- toggle: true,
438
- },
439
- {
440
- tag: 'auto-email-welcome',
441
- tag_name: '歡迎信件',
442
- name: '@{{app_name}}',
443
- title: '[@{{app_name}}] 歡迎您加入@{{app_name}}! 最豐富的選品商店',
444
- content: '[@{{app_name}}] 歡迎您加入@{{app_name}}! 最豐富的選品商店',
445
- toggle: true,
446
- },
447
- {
448
- tag: 'auto-email-verify',
449
- tag_name: '信箱驗證',
450
- name: '@{{app_name}}',
451
- title: '[@{{app_name}}] 帳號認證通知',
452
- content: '嗨!歡迎加入 @{{app_name}},請輸入驗證碼「 @{{code}} 」。請於一分鐘內輸入並完成驗證。',
453
- toggle: true,
454
- },
455
- {
456
- tag: 'auto-email-forget',
457
- tag_name: '忘記密碼',
458
- name: '@{{app_name}}',
459
- title: '[@{{app_name}}] 重設密碼',
460
- content: '[@{{app_name}}],請輸入驗證碼「 @{{code}} 」。請於一分鐘內輸入並完成驗證。',
461
- toggle: true,
462
- },
463
- {
464
- tag: 'get-customer-message',
465
- tag_name: '客服訊息',
466
- name: '@{{app_name}}',
467
- title: '[@{{app_name}}] 收到客服訊息',
468
- content: this.getCustomerMessageHTML(),
469
- toggle: true,
470
- },
471
- ];
472
- const keyData = await ApiUser.getPublicConfig(tag, 'manager');
473
- const b = dataList.find((dd: any) => {
474
- return dd.tag === tag;
475
- })!;
476
- if (keyData.response.value) {
477
- return {
478
- ...b,
479
- ...keyData.response.value,
480
- updated_time : new Date(keyData.response.value.updated_time)
481
- };
482
- }
483
- return b;
345
+ public static async getDefCompare(tag: string) {
346
+ const dataList: any = [
347
+ {
348
+ tag: 'auto-email-shipment',
349
+ tag_name: '商品出貨',
350
+ name: '@{{app_name}}',
351
+ title: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 出貨中',
352
+ content: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 出貨中',
353
+ toggle: true,
354
+ },
355
+ {
356
+ tag: 'auto-email-shipment-arrival',
357
+ tag_name: '商品到貨',
358
+ name: '@{{app_name}}',
359
+ title: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 已到達',
360
+ content: '[@{{app_name}}] #@{{訂單號碼}} 送貨狀態 更新為: 已到達',
361
+ toggle: true,
362
+ },
363
+ {
364
+ tag: 'auto-email-order-create',
365
+ tag_name: '訂單成立',
366
+ name: '@{{app_name}}',
367
+ title: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已成立',
368
+ content: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已成立',
369
+ toggle: true,
370
+ },
371
+ {
372
+ tag: 'auto-email-payment-successful',
373
+ tag_name: '訂單付款成功',
374
+ name: '@{{app_name}}',
375
+ title: '[@{{app_name}}] #@{{訂單號碼}} 付款狀態 更新為: 已付款',
376
+ content: '[@{{app_name}}] #@{{訂單號碼}} 付款狀態 更新為: 已付款',
377
+ toggle: true,
378
+ },
379
+ {
380
+ tag: 'proof-purchase',
381
+ tag_name: '訂單待核款',
382
+ name: '@{{app_name}}',
383
+ title: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已進入待核款',
384
+ content: '[@{{app_name}}] 您的訂單 #@{{訂單號碼}} 已進入待核款',
385
+ toggle: true,
386
+ },
387
+ {
388
+ tag: 'auto-email-order-cancel-success',
389
+ tag_name: '取消訂單成功',
390
+ name: '@{{app_name}}',
391
+ title: '[@{{app_name}}] 您已成功取消訂單 #@{{訂單號碼}}',
392
+ content: '[@{{app_name}}] 您已成功取消訂單 #@{{訂單號碼}}',
393
+ toggle: true,
394
+ },
395
+ {
396
+ tag: 'auto-email-order-cancel-false',
397
+ tag_name: '取消訂單失敗',
398
+ name: '@{{app_name}}',
399
+ title: '[@{{app_name}}] 取消訂單申請 #@{{訂單號碼}} 已失敗',
400
+ content: '[@{{app_name}}] 取消訂單申請 #@{{訂單號碼}} 已失敗',
401
+ toggle: true,
402
+ },
403
+ {
404
+ tag: 'auto-email-birthday',
405
+ tag_name: '生日祝福',
406
+ name: '@{{app_name}}',
407
+ title: '[@{{app_name}}] [@{{user_name}}] 今天是您一年一度的大日子!祝您生日快樂!',
408
+ content: '[@{{app_name}}] [@{{user_name}}] 今天是您一年一度的大日子!祝您生日快樂!',
409
+ toggle: true,
410
+ },
411
+ {
412
+ tag: 'auto-email-welcome',
413
+ tag_name: '歡迎信件',
414
+ name: '@{{app_name}}',
415
+ title: '[@{{app_name}}] 歡迎您加入@{{app_name}}! 最豐富的選品商店',
416
+ content: '[@{{app_name}}] 歡迎您加入@{{app_name}}! 最豐富的選品商店',
417
+ toggle: true,
418
+ },
419
+ {
420
+ tag: 'auto-email-verify',
421
+ tag_name: '信箱驗證',
422
+ name: '@{{app_name}}',
423
+ title: '[@{{app_name}}] 帳號認證通知',
424
+ content: '嗨!歡迎加入 @{{app_name}},請輸入驗證碼「 @{{code}} 」。請於一分鐘內輸入並完成驗證。',
425
+ toggle: true,
426
+ },
427
+ {
428
+ tag: 'auto-email-forget',
429
+ tag_name: '忘記密碼',
430
+ name: '@{{app_name}}',
431
+ title: '[@{{app_name}}] 重設密碼',
432
+ content: '[@{{app_name}}],請輸入驗證碼「 @{{code}} 」。請於一分鐘內輸入並完成驗證。',
433
+ toggle: true,
434
+ },
435
+ {
436
+ tag: 'get-customer-message',
437
+ tag_name: '客服訊息',
438
+ name: '@{{app_name}}',
439
+ title: '[@{{app_name}}] 收到客服訊息',
440
+ content: this.getCustomerMessageHTML(),
441
+ toggle: true,
442
+ },
443
+ ];
444
+ const keyData = await ApiUser.getPublicConfig(tag, 'manager');
445
+ const b = dataList.find((dd: any) => {
446
+ return dd.tag === tag;
447
+ })!;
448
+ if (keyData.response.value) {
449
+ return {
450
+ ...b,
451
+ ...keyData.response.value,
452
+ updated_time: new Date(keyData.response.value.updated_time),
453
+ };
484
454
  }
455
+ return b;
456
+ }
485
457
 
486
- public static getCustomerMessageHTML() {
487
- const html = String.raw;
488
- return html`
458
+ public static getCustomerMessageHTML() {
459
+ const html = String.raw;
460
+ return html` <table
461
+ width="100%"
462
+ border="0"
463
+ cellpadding="0"
464
+ cellspacing="0"
465
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; color: rgb(65, 65, 65); font-family: sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; background-color: rgb(255, 255, 255);"
466
+ id="isPasted"
467
+ >
468
+ <tbody
469
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
470
+ >
471
+ <tr
472
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
473
+ >
474
+ <td
475
+ style="box-sizing: border-box; border: 0px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px;"
476
+ >
489
477
  <table
490
- width="100%"
491
- border="0"
492
- cellpadding="0"
493
- cellspacing="0"
494
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; color: rgb(65, 65, 65); font-family: sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; background-color: rgb(255, 255, 255);"
495
- id="isPasted"
478
+ align="center"
479
+ width="100%"
480
+ border="0"
481
+ cellpadding="0"
482
+ cellspacing="0"
483
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; --bs-gutter-x: 1.5rem; --bs-gutter-y: 0; display: flex; flex-wrap: wrap; margin-top: calc(-1 * var(--bs-gutter-y)); margin-right: calc(-0.5 * var(--bs-gutter-x)); margin-left: calc(-0.5 * var(--bs-gutter-x)); border: none; empty-cells: show; max-width: 100%;"
496
484
  >
497
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
498
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
499
- <td style="box-sizing: border-box; border: 0px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px;">
500
- <table
501
- align="center"
502
- width="100%"
503
- border="0"
504
- cellpadding="0"
505
- cellspacing="0"
506
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; --bs-gutter-x: 1.5rem; --bs-gutter-y: 0; display: flex; flex-wrap: wrap; margin-top: calc(-1 * var(--bs-gutter-y)); margin-right: calc(-0.5 * var(--bs-gutter-x)); margin-left: calc(-0.5 * var(--bs-gutter-x)); border: none; empty-cells: show; max-width: 100%;"
485
+ <tbody
486
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased; flex-shrink: 0; width: 1055.59px; max-width: 100%; padding-right: calc(var(--bs-gutter-x) * 0.5); padding-left: calc(var(--bs-gutter-x) * 0.5); margin-top: var(--bs-gutter-y);"
487
+ >
488
+ <tr
489
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
490
+ >
491
+ <td
492
+ style="box-sizing: border-box; border: 0px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px;"
493
+ >
494
+ <table
495
+ align="center"
496
+ border="0"
497
+ cellpadding="0"
498
+ cellspacing="0"
499
+ width="600"
500
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; color: rgb(0, 0, 0); width: 600px; margin: 0px auto;"
501
+ >
502
+ <tbody
503
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
504
+ >
505
+ <tr
506
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
507
507
  >
508
- <tbody
509
- style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased; flex-shrink: 0; width: 1055.59px; max-width: 100%; padding-right: calc(var(--bs-gutter-x) * 0.5); padding-left: calc(var(--bs-gutter-x) * 0.5); margin-top: var(--bs-gutter-y);"
508
+ <td
509
+ width="100%"
510
+ style="box-sizing: border-box; border: 0px; -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; font-weight: 400; text-align: left; padding-bottom: 5px; padding-top: 5px; vertical-align: top;"
511
+ >
512
+ <table
513
+ width="100%"
514
+ border="0"
515
+ cellpadding="0"
516
+ cellspacing="0"
517
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%;"
510
518
  >
511
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
512
- <td style="box-sizing: border-box; border: 0px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px;">
513
- <table
514
- align="center"
515
- border="0"
516
- cellpadding="0"
517
- cellspacing="0"
518
- width="600"
519
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; color: rgb(0, 0, 0); width: 600px; margin: 0px auto;"
519
+ <tbody
520
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
521
+ >
522
+ <tr
523
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
524
+ >
525
+ <td
526
+ style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; width: 599px;"
527
+ >
528
+ <div
529
+ align="center"
530
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; line-height: 10px;"
520
531
  >
521
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
522
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
523
- <td
524
- width="100%"
525
- style="box-sizing: border-box; border: 0px; -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; font-weight: 400; text-align: left; padding-bottom: 5px; padding-top: 5px; vertical-align: top;"
526
- >
527
- <table
528
- width="100%"
529
- border="0"
530
- cellpadding="0"
531
- cellspacing="0"
532
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%;"
533
- >
534
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
535
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
536
- <td
537
- style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; width: 599px;"
538
- >
539
- <div align="center"
540
- style="box-sizing: border-box; -webkit-font-smoothing: antialiased; line-height: 10px;">
541
- <div style="box-sizing: border-box; -webkit-font-smoothing: antialiased; max-width: 600px;">
542
- <img
543
- src="https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1719903595261-s3s4scs3s7sfsfs7.png"
544
- class="fr-fic fr-dii"
545
- style="width: 100%;"
546
- />
547
- <br/>
548
- </div>
549
- </div>
550
- </td>
551
- </tr>
552
- </tbody>
553
- </table>
532
+ <div
533
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; max-width: 600px;"
534
+ >
535
+ <img
536
+ src="https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1719903595261-s3s4scs3s7sfsfs7.png"
537
+ class="fr-fic fr-dii"
538
+ style="width: 100%;"
539
+ />
540
+ <br />
541
+ </div>
542
+ </div>
543
+ </td>
544
+ </tr>
545
+ </tbody>
546
+ </table>
554
547
 
555
- <table
556
- width="100%"
557
- border="0"
558
- cellpadding="0"
559
- cellspacing="0"
560
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%;"
561
- >
562
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
563
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
564
- <td
565
- style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 60px 45px 30px; text-align: left; width: 599px;"
566
- >
567
- <h1
568
- style="box-sizing: border-box; margin: 0px; font-weight: 700; line-height: 33.6px; color: rgb(54, 54, 54); font-size: 28px; -webkit-font-smoothing: antialiased; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; direction: ltr; font-family: Arial, Helvetica, sans-serif; text-align: left;"
569
- id="isPasted"
570
- >
571
- 客服訊息
572
- </h1>
573
- <br/>
574
- <div style="width: 100%;text-align: start;">@{{text}}</div>
575
- <br/>
576
- <br/><span
577
- style="color: rgb(16, 17, 18); font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"
578
- ><a
579
- href="@{{link}}"
580
- target="_blank"
581
- style="box-sizing: border-box; color: rgb(255, 255, 255); text-decoration: none; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 148, 2); border-width: 0px; border-style: solid; border-color: transparent; border-radius: 5px; display: inline-block; font-family: Arial, Helvetica, sans-serif; font-size: 24px; padding-bottom: 15px; padding-top: 15px; text-align: center; width: auto; word-break: keep-all;"
582
- id="isPasted"
583
- ><span
584
- style="box-sizing: border-box; -webkit-font-smoothing: antialiased; padding-left: 30px; padding-right: 30px; font-size: 24px; display: inline-block; letter-spacing: normal;"
585
- ><span
586
- style="box-sizing: border-box; -webkit-font-smoothing: antialiased; word-break: break-word; line-height: 48px;"
587
- ><strong
588
- style="box-sizing: border-box; font-weight: 700; -webkit-font-smoothing: antialiased;"
589
- >前往商店</strong
590
- ></span
591
- ></span
592
- ></a
593
- ></span
594
- >
595
- <br/>
596
- </td>
597
- </tr>
598
- </tbody>
599
- </table>
548
+ <table
549
+ width="100%"
550
+ border="0"
551
+ cellpadding="0"
552
+ cellspacing="0"
553
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%;"
554
+ >
555
+ <tbody
556
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
557
+ >
558
+ <tr
559
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
560
+ >
561
+ <td
562
+ style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 60px 45px 30px; text-align: left; width: 599px;"
563
+ >
564
+ <h1
565
+ style="box-sizing: border-box; margin: 0px; font-weight: 700; line-height: 33.6px; color: rgb(54, 54, 54); font-size: 28px; -webkit-font-smoothing: antialiased; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; direction: ltr; font-family: Arial, Helvetica, sans-serif; text-align: left;"
566
+ id="isPasted"
567
+ >
568
+ 客服訊息
569
+ </h1>
570
+ <br />
571
+ <div style="width: 100%;text-align: start;">@{{text}}</div>
572
+ <br />
573
+ <br /><span
574
+ style="color: rgb(16, 17, 18); font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"
575
+ ><a
576
+ href="@{{link}}"
577
+ target="_blank"
578
+ style="box-sizing: border-box; color: rgb(255, 255, 255); text-decoration: none; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 148, 2); border-width: 0px; border-style: solid; border-color: transparent; border-radius: 5px; display: inline-block; font-family: Arial, Helvetica, sans-serif; font-size: 24px; padding-bottom: 15px; padding-top: 15px; text-align: center; width: auto; word-break: keep-all;"
579
+ id="isPasted"
580
+ ><span
581
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; padding-left: 30px; padding-right: 30px; font-size: 24px; display: inline-block; letter-spacing: normal;"
582
+ ><span
583
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; word-break: break-word; line-height: 48px;"
584
+ ><strong
585
+ style="box-sizing: border-box; font-weight: 700; -webkit-font-smoothing: antialiased;"
586
+ >前往商店</strong
587
+ ></span
588
+ ></span
589
+ ></a
590
+ ></span
591
+ >
592
+ <br />
593
+ </td>
594
+ </tr>
595
+ </tbody>
596
+ </table>
600
597
 
601
- <table
602
- width="100%"
603
- border="0"
604
- cellpadding="0"
605
- cellspacing="0"
606
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; word-break: break-word; background-color: rgb(247, 247, 247);"
607
- >
608
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
609
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
610
- <td
611
- style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 28px 45px 10px;"
612
- >
613
- <div
614
- style="box-sizing: border-box; -webkit-font-smoothing: antialiased; color: rgb(16, 17, 18); direction: ltr; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight: 400; letter-spacing: 0px; line-height: 19.2px; text-align: left;"
615
- >
616
- <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;">
617
- 如果您有任何疑問或需要幫助,我們的團隊隨時在這裡為您提供支持。
618
- </p>
598
+ <table
599
+ width="100%"
600
+ border="0"
601
+ cellpadding="0"
602
+ cellspacing="0"
603
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; word-break: break-word; background-color: rgb(247, 247, 247);"
604
+ >
605
+ <tbody
606
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
607
+ >
608
+ <tr
609
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
610
+ >
611
+ <td
612
+ style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 28px 45px 10px;"
613
+ >
614
+ <div
615
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; color: rgb(16, 17, 18); direction: ltr; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-weight: 400; letter-spacing: 0px; line-height: 19.2px; text-align: left;"
616
+ >
617
+ <p
618
+ style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;"
619
+ >
620
+ 如果您有任何疑問或需要幫助,我們的團隊隨時在這裡為您提供支持。
621
+ </p>
619
622
 
620
- <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;">
621
- 服務電話:+886 978-028-730
622
- </p>
623
+ <p
624
+ style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;"
625
+ >
626
+ 服務電話:+886 978-028-730
627
+ </p>
623
628
 
624
- <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;">
625
- 電子郵件:mk@ncdesign.info
626
- </p>
627
- </div>
628
- </td>
629
- </tr>
630
- </tbody>
631
- </table>
629
+ <p
630
+ style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;"
631
+ >
632
+ 電子郵件:mk@ncdesign.info
633
+ </p>
634
+ </div>
635
+ </td>
636
+ </tr>
637
+ </tbody>
638
+ </table>
632
639
 
633
- <table
634
- width="100%"
635
- border="0"
636
- cellpadding="0"
637
- cellspacing="0"
638
- style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; word-break: break-word; background-color: rgb(247, 247, 247);"
639
- >
640
- <tbody style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
641
- <tr style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;">
642
- <td
643
- style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 20px 10px 10px;"
644
- >
645
- <div
646
- style="box-sizing: border-box; -webkit-font-smoothing: antialiased; color: rgb(16, 17, 18); direction: ltr; font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: 400; letter-spacing: 0px; line-height: 16.8px; text-align: center;"
647
- >
648
- <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;">
649
- <a
650
- href="https://shopnex.tw/?article=termsofservice&page=blog_detail"
651
- target="_blank"
652
- rel="noopener"
653
- style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
654
- >服務條款</a
655
- >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
656
- <a
657
- href="https://shopnex.tw/?article=privacyterms&page=blog_detail"
658
- target="_blank"
659
- rel="noopener"
660
- style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
661
- >隱私條款</a
662
- >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
663
- <a
664
- href="https://shopnex.tw/?article=privacyterms&page=e-commerce-blog"
665
- target="_blank"
666
- rel="noopener"
667
- style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
668
- >開店教學</a
669
- >
670
- </p>
671
- </div>
672
- </td>
673
- </tr>
674
- </tbody>
675
- </table>
676
- </td>
677
- </tr>
678
- </tbody>
679
- </table>
680
- </td>
681
- </tr>
682
- </tbody>
683
- </table>
684
- </td>
640
+ <table
641
+ width="100%"
642
+ border="0"
643
+ cellpadding="0"
644
+ cellspacing="0"
645
+ style="box-sizing: border-box; caption-side: bottom; border-collapse: collapse; -webkit-font-smoothing: antialiased; border: none; empty-cells: show; max-width: 100%; word-break: break-word; background-color: rgb(247, 247, 247);"
646
+ >
647
+ <tbody
648
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
649
+ >
650
+ <tr
651
+ style="box-sizing: border-box; border-color: inherit; border-style: solid; border-width: 0px; -webkit-font-smoothing: antialiased;"
652
+ >
653
+ <td
654
+ style="box-sizing: border-box; border: 1px solid rgb(221, 221, 221); -webkit-font-smoothing: antialiased; user-select: text; min-width: 5px; padding: 20px 10px 10px;"
655
+ >
656
+ <div
657
+ style="box-sizing: border-box; -webkit-font-smoothing: antialiased; color: rgb(16, 17, 18); direction: ltr; font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: 400; letter-spacing: 0px; line-height: 16.8px; text-align: center;"
658
+ >
659
+ <p
660
+ style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; -webkit-font-smoothing: antialiased;"
661
+ >
662
+ <a
663
+ href="https://shopnex.tw/?article=termsofservice&page=blog_detail"
664
+ target="_blank"
665
+ rel="noopener"
666
+ style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
667
+ >服務條款</a
668
+ >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
669
+ <a
670
+ href="https://shopnex.tw/?article=privacyterms&page=blog_detail"
671
+ target="_blank"
672
+ rel="noopener"
673
+ style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
674
+ >隱私條款</a
675
+ >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
676
+ <a
677
+ href="https://shopnex.tw/?article=privacyterms&page=e-commerce-blog"
678
+ target="_blank"
679
+ rel="noopener"
680
+ style="box-sizing: border-box; color: rgb(28, 28, 28); text-decoration: underline; -webkit-font-smoothing: antialiased; transition: color 0.2s ease-in-out 0s; user-select: auto;"
681
+ >開店教學</a
682
+ >
683
+ </p>
684
+ </div>
685
+ </td>
686
+ </tr>
687
+ </tbody>
688
+ </table>
689
+ </td>
690
+ </tr>
691
+ </tbody>
692
+ </table>
693
+ </td>
685
694
  </tr>
686
- </tbody>
687
- </table>`;
688
- }
695
+ </tbody>
696
+ </table>
697
+ </td>
698
+ </tr>
699
+ </tbody>
700
+ </table>`;
701
+ }
689
702
  }
690
703
 
691
704
  (window as any).glitter.setModule(import.meta.url, AutoReply);