ts-glitter 21.5.7 → 21.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/lib/glitterBundle/html-component/editor.ts +5 -5
  2. package/lib/glitterBundle/html-component/widget.ts +1 -1
  3. package/lib/glitterBundle/plugins/add_item_dia.ts +3 -3
  4. package/lib/glitterBundle/plugins/dialog-style-editor.ts +4 -4
  5. package/lib/glitterBundle/plugins/editor-elem.ts +8 -8
  6. package/lib/glitterBundle/plugins/editor.ts +3 -3
  7. package/lowcode/Entry.js +1 -1
  8. package/lowcode/Entry.ts +1 -1
  9. package/lowcode/backend-manager/bg-customer-message.js +4 -4
  10. package/lowcode/backend-manager/bg-customer-message.ts +4 -4
  11. package/lowcode/backend-manager/bg-global-event.js +1 -1
  12. package/lowcode/backend-manager/bg-global-event.ts +1 -1
  13. package/lowcode/backend-manager/bg-guide.js +21 -21
  14. package/lowcode/backend-manager/bg-guide.ts +22 -22
  15. package/lowcode/backend-manager/bg-mobile-guide.js +4 -4
  16. package/lowcode/backend-manager/bg-mobile-guide.ts +4 -4
  17. package/lowcode/backend-manager/bg-seo.js +1 -1
  18. package/lowcode/backend-manager/bg-seo.ts +1 -1
  19. package/lowcode/backend-manager/bg-shopping.js +6 -6
  20. package/lowcode/backend-manager/bg-shopping.ts +6 -6
  21. package/lowcode/backend-manager/bg-wallet.js +3 -3
  22. package/lowcode/backend-manager/bg-wallet.ts +3 -3
  23. package/lowcode/backend-manager/bg-widget.js +6 -0
  24. package/lowcode/backend-manager/bg-widget.ts +7 -0
  25. package/lowcode/cms-plugin/POS-setting.js +1 -1
  26. package/lowcode/cms-plugin/POS-setting.ts +1 -1
  27. package/lowcode/cms-plugin/ai-generator/member-ai.js +2 -2
  28. package/lowcode/cms-plugin/ai-generator/member-ai.ts +2 -2
  29. package/lowcode/cms-plugin/ai-generator/product-ai.js +2 -2
  30. package/lowcode/cms-plugin/ai-generator/product-ai.ts +2 -2
  31. package/lowcode/cms-plugin/ai-message.js +2 -2
  32. package/lowcode/cms-plugin/ai-message.ts +2 -2
  33. package/lowcode/cms-plugin/ai-points-list.js +2 -2
  34. package/lowcode/cms-plugin/ai-points-list.ts +2 -2
  35. package/lowcode/cms-plugin/app-design.js +3 -3
  36. package/lowcode/cms-plugin/app-design.ts +3 -3
  37. package/lowcode/cms-plugin/app-release.js +2 -2
  38. package/lowcode/cms-plugin/app-release.ts +2 -2
  39. package/lowcode/cms-plugin/customer-message-user.js +5 -5
  40. package/lowcode/cms-plugin/customer-message-user.ts +5 -5
  41. package/lowcode/cms-plugin/data-analyze-module.js +3 -3
  42. package/lowcode/cms-plugin/data-analyze-module.ts +3 -3
  43. package/lowcode/cms-plugin/domain-setting.js +2 -2
  44. package/lowcode/cms-plugin/domain-setting.ts +2 -2
  45. package/lowcode/cms-plugin/live_capture.js +17 -17
  46. package/lowcode/cms-plugin/live_capture.ts +17 -17
  47. package/lowcode/cms-plugin/member-type-list.js +4 -4
  48. package/lowcode/cms-plugin/member-type-list.ts +4 -4
  49. package/lowcode/cms-plugin/module/form-module.js +1 -1
  50. package/lowcode/cms-plugin/module/form-module.ts +1 -1
  51. package/lowcode/cms-plugin/permission-setting.js +5 -5
  52. package/lowcode/cms-plugin/permission-setting.ts +5 -5
  53. package/lowcode/cms-plugin/pos-basic-setting.js +1 -1
  54. package/lowcode/cms-plugin/pos-basic-setting.ts +2 -2
  55. package/lowcode/cms-plugin/pos-checkout-setting.js +3 -3
  56. package/lowcode/cms-plugin/pos-checkout-setting.ts +4 -4
  57. package/lowcode/cms-plugin/pos-pages/payment-page.js +449 -232
  58. package/lowcode/cms-plugin/pos-pages/payment-page.ts +501 -278
  59. package/lowcode/cms-plugin/pos-pages/pos-function.js +3 -2
  60. package/lowcode/cms-plugin/pos-pages/pos-function.ts +4 -3
  61. package/lowcode/cms-plugin/pos-pages/pos-home-page.js +9 -9
  62. package/lowcode/cms-plugin/pos-pages/pos-home-page.ts +9 -9
  63. package/lowcode/cms-plugin/pos-pages/pos-summary.js +2 -2
  64. package/lowcode/cms-plugin/pos-pages/pos-summary.ts +2 -2
  65. package/lowcode/cms-plugin/pos-pages/products-page.js +6 -180
  66. package/lowcode/cms-plugin/pos-pages/products-page.ts +6 -185
  67. package/lowcode/cms-plugin/product-service.js +4 -4
  68. package/lowcode/cms-plugin/product-service.ts +4 -5
  69. package/lowcode/cms-plugin/reconciliation-area.js +24 -24
  70. package/lowcode/cms-plugin/reconciliation-area.ts +24 -24
  71. package/lowcode/cms-plugin/seo-blog.js +2 -2
  72. package/lowcode/cms-plugin/seo-blog.ts +2 -2
  73. package/lowcode/cms-plugin/seo-setting-v2.js +5 -5
  74. package/lowcode/cms-plugin/seo-setting-v2.ts +5 -5
  75. package/lowcode/cms-plugin/shopping-allowance-manager.js +4 -4
  76. package/lowcode/cms-plugin/shopping-allowance-manager.ts +4 -4
  77. package/lowcode/cms-plugin/shopping-collections.js +6 -6
  78. package/lowcode/cms-plugin/shopping-collections.ts +6 -6
  79. package/lowcode/cms-plugin/shopping-invoice-manager.js +11 -11
  80. package/lowcode/cms-plugin/shopping-invoice-manager.ts +11 -11
  81. package/lowcode/cms-plugin/shopping-order-manager.js +21 -13
  82. package/lowcode/cms-plugin/shopping-order-manager.ts +21 -13
  83. package/lowcode/cms-plugin/shopping-product-setting.js +1 -1
  84. package/lowcode/cms-plugin/shopping-product-setting.ts +1 -1
  85. package/lowcode/cms-plugin/shopping-product-text.js +5 -5
  86. package/lowcode/cms-plugin/shopping-product-text.ts +5 -5
  87. package/lowcode/cms-plugin/shopping-setting-basic.js +5 -6
  88. package/lowcode/cms-plugin/shopping-setting-basic.ts +5 -6
  89. package/lowcode/cms-plugin/shopping-shipment-setting.js +2 -2
  90. package/lowcode/cms-plugin/shopping-shipment-setting.ts +2 -2
  91. package/lowcode/cms-plugin/stock-history.js +7 -7
  92. package/lowcode/cms-plugin/stock-history.ts +7 -7
  93. package/lowcode/cms-plugin/stock-stores.js +2 -2
  94. package/lowcode/cms-plugin/stock-stores.ts +2 -2
  95. package/lowcode/cms-plugin/stock-vendors.js +2 -2
  96. package/lowcode/cms-plugin/stock-vendors.ts +2 -2
  97. package/lowcode/cms-plugin/third-party-google.js +1 -1
  98. package/lowcode/cms-plugin/third-party-google.ts +1 -1
  99. package/lowcode/cms-plugin/user-list.js +6 -2
  100. package/lowcode/cms-plugin/user-list.ts +7 -2
  101. package/lowcode/cms-plugin/user-login-setting.js +1 -1
  102. package/lowcode/cms-plugin/user-login-setting.ts +1 -1
  103. package/lowcode/cms-plugin/wallet-list.js +3 -3
  104. package/lowcode/cms-plugin/wallet-list.ts +3 -3
  105. package/lowcode/dialog/addTemplate.js +9 -9
  106. package/lowcode/dialog/addTemplate.ts +9 -9
  107. package/lowcode/dialog/dialog.js +1 -1
  108. package/lowcode/dialog/dialog.ts +1 -1
  109. package/lowcode/dialog/dialog_setting.js +1 -1
  110. package/lowcode/dialog/dialog_setting.ts +1 -1
  111. package/lowcode/dialog/image-preview.js +2 -2
  112. package/lowcode/dialog/image-preview.ts +2 -2
  113. package/lowcode/editor/add-component.js +4 -4
  114. package/lowcode/editor/add-component.ts +9 -9
  115. package/lowcode/editor/add-page.js +1 -1
  116. package/lowcode/editor/add-page.ts +1 -1
  117. package/lowcode/editor/normal-page-editor.js +2 -2
  118. package/lowcode/editor/normal-page-editor.ts +2 -2
  119. package/lowcode/editor/page-code-setting.js +1 -1
  120. package/lowcode/editor/page-code-setting.ts +1 -1
  121. package/lowcode/editor/page-editor.js +15 -15
  122. package/lowcode/editor/page-editor.ts +15 -15
  123. package/lowcode/editor/page-setting-view.js +6 -6
  124. package/lowcode/editor/page-setting-view.ts +6 -6
  125. package/lowcode/editor/preview-app.js +1 -1
  126. package/lowcode/editor/preview-app.ts +1 -1
  127. package/lowcode/editor/search-idea.js +2 -2
  128. package/lowcode/editor/search-idea.ts +2 -2
  129. package/lowcode/editor/set-global-value.js +9 -9
  130. package/lowcode/editor/set-global-value.ts +9 -9
  131. package/lowcode/editor-bridge/trigger-event.js +1 -1
  132. package/lowcode/editor-bridge/trigger-event.ts +1 -1
  133. package/lowcode/editor-components/global-widget/global-widget.js +1 -1
  134. package/lowcode/editor-components/global-widget/global-widget.ts +1 -1
  135. package/lowcode/editor-config.js +1 -1
  136. package/lowcode/editor-config.ts +1 -1
  137. package/lowcode/form-view/e-commerce/path-select.js +1 -1
  138. package/lowcode/form-view/e-commerce/path-select.ts +1 -1
  139. package/lowcode/form-view/e-commerce/product-select.js +1 -1
  140. package/lowcode/form-view/e-commerce/product-select.ts +1 -1
  141. package/lowcode/form-view/editor/color-theme-selector.js +2 -2
  142. package/lowcode/form-view/editor/color-theme-selector.ts +2 -2
  143. package/lowcode/form-view/editor/image-selector.js +5 -5
  144. package/lowcode/form-view/editor/image-selector.ts +5 -5
  145. package/lowcode/glitterBundle/html-component/custom-style.js +6 -6
  146. package/lowcode/glitterBundle/html-component/custom-style.ts +6 -6
  147. package/lowcode/glitterBundle/html-component/global-widget.js +2 -2
  148. package/lowcode/glitterBundle/html-component/global-widget.ts +2 -2
  149. package/lowcode/glitterBundle/html-component/widget.js +1 -1
  150. package/lowcode/glitterBundle/html-component/widget.ts +1 -1
  151. package/lowcode/glitterBundle/module/html-generate.js +2 -2
  152. package/lowcode/glitterBundle/module/html-generate.ts +2 -2
  153. package/lowcode/glitterBundle/plugins/add_item_dia.js +7 -7
  154. package/lowcode/glitterBundle/plugins/add_item_dia.ts +7 -7
  155. package/lowcode/glitterBundle/plugins/editor-elem.js +4 -6
  156. package/lowcode/glitterBundle/plugins/editor-elem.ts +4 -6
  157. package/lowcode/glitterBundle/plugins/editor.js +3 -3
  158. package/lowcode/glitterBundle/plugins/editor.ts +3 -3
  159. package/lowcode/glitterBundle/plugins/style-editor.js +5 -5
  160. package/lowcode/glitterBundle/plugins/style-editor.ts +5 -5
  161. package/lowcode/jspage/editor.js +3 -3
  162. package/lowcode/jspage/editor.ts +3 -3
  163. package/lowcode/jspage/function-page/main_editor.js +6 -6
  164. package/lowcode/jspage/function-page/main_editor.ts +6 -6
  165. package/lowcode/jspage/function-page/page_editor.js +4 -4
  166. package/lowcode/jspage/function-page/page_editor.ts +4 -4
  167. package/lowcode/jspage/function-page/server-editor/router/domain-manager.js +3 -3
  168. package/lowcode/jspage/function-page/server-editor/router/domain-manager.ts +3 -3
  169. package/lowcode/jspage/function-page/tool-setting.js +2 -2
  170. package/lowcode/jspage/function-page/tool-setting.ts +2 -2
  171. package/lowcode/landing-page/about-us.js +5 -5
  172. package/lowcode/landing-page/about-us.ts +5 -5
  173. package/lowcode/modules/file-system.js +2 -2
  174. package/lowcode/modules/file-system.ts +2 -2
  175. package/lowcode/modules/image-library-clone.js +4 -4
  176. package/lowcode/modules/image-library-clone.ts +4 -4
  177. package/lowcode/modules/image-library.js +2 -2
  178. package/lowcode/modules/image-library.ts +2 -2
  179. package/lowcode/official_view_component/official/component.js +1 -1
  180. package/lowcode/official_view_component/official/component.ts +1 -1
  181. package/lowcode/official_view_component/official/widget.js +1 -1
  182. package/lowcode/official_view_component/official/widget.ts +1 -1
  183. package/lowcode/public-components/banner/first-banner.js +1 -1
  184. package/lowcode/public-components/banner/first-banner.ts +1 -1
  185. package/lowcode/public-components/blogs/list.js +1 -1
  186. package/lowcode/public-components/blogs/list.ts +1 -1
  187. package/lowcode/public-components/headers/sy-02.js +4 -4
  188. package/lowcode/public-components/headers/sy-02.ts +4 -4
  189. package/lowcode/public-components/headers/sy-03.js +1 -1
  190. package/lowcode/public-components/headers/sy-03.ts +1 -1
  191. package/lowcode/public-components/headers/sy-04.js +2 -2
  192. package/lowcode/public-components/headers/sy-04.ts +2 -2
  193. package/lowcode/public-components/headers/sy-05.js +1 -1
  194. package/lowcode/public-components/headers/sy-05.ts +1 -1
  195. package/lowcode/public-components/user-manager/um-order.js +2 -2
  196. package/lowcode/public-components/user-manager/um-order.ts +2 -2
  197. package/lowcode/setting/appSetting.js +4 -4
  198. package/lowcode/setting/appSetting.ts +4 -4
  199. package/lowcode/setting/initialStyle.js +2 -2
  200. package/lowcode/setting/initialStyle.ts +2 -2
  201. package/lowcode/setting/pageManager.js +6 -6
  202. package/lowcode/setting/pageManager.ts +6 -6
  203. package/lowcode/view-model/saas-view-model.js +2 -2
  204. package/lowcode/view-model/saas-view-model.ts +2 -2
  205. package/package.json +1 -1
  206. package/src/index.js +7 -17
  207. package/src/index.js.map +1 -1
  208. package/src/index.ts +1 -0
  209. package/src/modules/database.js +2 -1
  210. package/src/modules/database.js.map +1 -1
  211. package/src/modules/database.ts +2 -1
  212. package/src/seo-config.js +0 -1
  213. package/src/seo-config.js.map +1 -1
  214. package/src/seo-config.ts +0 -1
  215. package/src/services/system-schedule.js +1 -2
  216. package/src/services/system-schedule.js.map +1 -1
  217. package/src/services/system-schedule.ts +4 -4
@@ -20,6 +20,7 @@ import { PaymentFunction } from './payment-function.js';
20
20
  import { UmClass } from '../../public-components/user-manager/um-class.js';
21
21
  import { FormCheck } from '../module/form-check.js';
22
22
  import { ShipmentConfig } from '../../glitter-base/global/shipment-config.js';
23
+ import { Tool } from '../../modules/tool.js';
23
24
 
24
25
  const html = String.raw;
25
26
 
@@ -60,16 +61,6 @@ export class PaymentPage {
60
61
  return { title: item.title, value: item.value };
61
62
  });
62
63
 
63
- // 可用的運送選項(原)
64
- // const availableOptions = [
65
- // { title: '一般宅配', value: 'normal' },
66
- // { title: '全家店到店', value: 'FAMIC2C' },
67
- // { title: '萊爾富店到店', value: 'HILIFEC2C' },
68
- // { title: 'OK超商店到店', value: 'OKMARTC2C' },
69
- // { title: '7-ELEVEN超商交貨便', value: 'UNIMARTC2C' },
70
- // { title: '門市取貨', value: 'shop' },
71
- // ].filter(option => orderDetail.shipment_support.includes(option.value));
72
-
73
64
  // 合併預設選項和可用運送選項
74
65
  return defaultOptions.concat(availableOptions);
75
66
  }
@@ -84,6 +75,7 @@ export class PaymentPage {
84
75
  const vm = obj.vm;
85
76
  const dialog = new ShareDialog(gvc.glitter);
86
77
  PaymentPage.storeHistory(obj.ogOrderData);
78
+ PaymentPage.addStyle(gvc);
87
79
 
88
80
  // 確保初始化包含預設值
89
81
  obj.ogOrderData.pos_info = obj.ogOrderData.pos_info || {
@@ -117,8 +109,8 @@ export class PaymentPage {
117
109
  return {
118
110
  bind: id,
119
111
  view: () => {
120
- return new Promise(async (resolve, reject) => {
121
- //後端返回的訂單資料預覽
112
+ return new Promise(async resolve => {
113
+ // 後端返回的訂單資料預覽
122
114
  const orderDetail = await (async () => {
123
115
  dialog.dataLoading({ visible: true });
124
116
  const userInfo = obj.ogOrderData.user_info || {};
@@ -153,7 +145,7 @@ export class PaymentPage {
153
145
  ) {
154
146
  (obj.ogOrderData.user_info.shipment as any) = 'now';
155
147
  }
156
- //儲存資料至本地暫存
148
+ // 儲存資料至本地暫存
157
149
  obj.ogOrderData.lineItems = obj.ogOrderData.lineItems.filter(dd => {
158
150
  return orderDetail.lineItems.find((d1: any) => {
159
151
  return dd.id + dd.spec.join('-') === d1.id + d1.spec.join('-');
@@ -183,9 +175,9 @@ export class PaymentPage {
183
175
  >
184
176
  ${PosWidget.bigTitle('訂單明細')}
185
177
  <div
186
- class="d-flex flex-column ${document.body.offsetWidth < 800 ? `` : ``}"
178
+ class="d-flex flex-column ${document.body.offsetWidth < 800 ? '' : ''}"
187
179
  style="${document.body.offsetWidth < 800
188
- ? ``
180
+ ? ''
189
181
  : `padding:24px;border-radius: 10px;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.08);margin-top:32px;`}"
190
182
  >
191
183
  <div
@@ -198,112 +190,134 @@ export class PaymentPage {
198
190
  <div class="col-2 text-center">數量${hasWeighing ? ' / 重量' : ''}</div>
199
191
  <div class="col-2 text-center">小計</div>
200
192
  </div>
201
- <div class="d-flex flex-column" style="${document.body.offsetWidth < 800 ? `` : ``}">
193
+ <div class="d-flex flex-column" style="${document.body.offsetWidth < 800 ? '' : ''}">
202
194
  ${(() => {
203
- if (orderDetail.lineItems.length > 0) {
204
- return orderDetail.lineItems
205
- .map((data: any, index: number) => {
206
- return html`
207
- <div class="d-flex" style="">
208
- <div class="col-12 col-sm-6 d-flex align-items-center">
195
+ if (orderDetail.lineItems.length === 0) {
196
+ return '';
197
+ }
198
+
199
+ const ogOrderMap = new Map(
200
+ obj.ogOrderData.lineItems.map((ogItem, index) => {
201
+ return [`${ogItem.id}-${ogItem.spec.join('/')}`, index];
202
+ })
203
+ );
204
+
205
+ const lineItemCountMap = new Map(
206
+ orderDetail.lineItems.map((item: any) => {
207
+ return [`${item.id}-${item.spec.join('/')}`, item.count];
208
+ })
209
+ );
210
+
211
+ const resetSalePriceIcon = (data: any, index: number) => {
212
+ return html`<i
213
+ class="fa-solid fa-pencil cursor_pointer"
214
+ onclick="${gvc.event(() => {
215
+ const def = obj.ogOrderData.lineItems?.[index]?.custom_price || 0;
216
+
217
+ PosFunction.setMoney(
218
+ gvc,
219
+ def,
220
+ money => {
221
+ if (money === data.sale_price) {
222
+ delete obj.ogOrderData.lineItems[index].custom_price;
223
+ } else {
224
+ obj.ogOrderData.lineItems[index].custom_price = money;
225
+ }
226
+ refreshOrderView();
227
+ },
228
+ '更改商品單價'
229
+ );
230
+ })}"
231
+ ></i>`;
232
+ };
233
+
234
+ return [...ogOrderMap.keys()]
235
+ .filter(key => {
236
+ return lineItemCountMap.get(key);
237
+ })
238
+ .map(key => {
239
+ const lineItemKeys = [...lineItemCountMap.keys()].findIndex(k => k === key);
240
+ const index = ogOrderMap.get(key);
241
+ const data = orderDetail.lineItems[lineItemKeys];
242
+
243
+ if (index === undefined) {
244
+ console.error(`ogOrderData LineItems 不存在商品規格 ${key}`);
245
+ return '';
246
+ }
247
+
248
+ return html`
249
+ <div class="d-flex">
250
+ <div class="col-12 col-sm-6 d-flex align-items-center">
251
+ <div
252
+ class="d-flex flex-column align-items-center justify-content-center"
253
+ style="gap:5px;width:75px;"
254
+ >
255
+ <div style="height: 20px;"></div>
256
+ <div
257
+ style="width: 70px;height: 70px; min-width: 70px;min-height: 70px; border-radius: 5px;background: 50%/cover url('${data.preview_image ||
258
+ 'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg'}')"
259
+ ></div>
209
260
  <div
210
- class="d-flex flex-column align-items-center justify-content-center"
211
- style="gap:5px;width:75px;"
261
+ style="font-size: 13px;height: 20px;"
262
+ class="fw-500 ${data.pre_order ? `text-danger` : ''}"
212
263
  >
213
- <div style="height: 20px;"></div>
214
- <div
215
- style="width: 70px;height: 70px; min-width: 70px;min-height: 70px; border-radius: 5px;background: 50%/cover url('${data.preview_image ||
216
- 'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg'}')"
217
- ></div>
218
- <div
219
- style="font-size: 13px;height: 20px;"
220
- class="fw-500 ${data.pre_order ? `text-danger` : ``}"
221
- >
222
- 庫存:${(() => {
223
- if (`${data.show_understocking}` === 'false') {
224
- return `不追蹤`;
225
- } else {
226
- return (
227
- (data.stockList[POSSetting.config.where_store] &&
228
- data.stockList[POSSetting.config.where_store].count) ||
229
- 0
230
- );
231
- }
232
- })()}
233
- </div>
264
+ ${(() => {
265
+ if (`${data.show_understocking}` === 'false') {
266
+ return '不追蹤庫存';
267
+ }
268
+
269
+ const stock = data.stockList[POSSetting.config.where_store];
270
+ return `庫存: ${stock?.count || 0}`;
271
+ })()}
234
272
  </div>
235
- <div
236
- class="d-flex flex-column py-2"
237
- onclick="${gvc.event(() => {
238
- const def = obj.ogOrderData.lineItems?.[index]?.count || 0;
239
-
240
- PosFunction.setMoney(
241
- gvc,
242
- def,
243
- count => {
244
- obj.ogOrderData.lineItems[index].count = count;
245
- refreshOrderView();
246
- },
247
- '更改商品數量'
248
- );
249
- })}"
250
- style="font-size: 16px;font-style: normal;font-weight: 500;letter-spacing: 0.64px;margin-left: 12px;"
273
+ </div>
274
+ <div
275
+ class="d-flex flex-column mt-3 gap-1"
276
+ style="font-size: 16px;font-style: normal;font-weight: 500;letter-spacing: 0.64px;margin-left: 12px;"
277
+ >
278
+ ${data.pre_order
279
+ ? html`<div>${BgWidget.warningInsignia('需預購', { size: 'sm' })}</div>`
280
+ : ''}
281
+ <div class="d-flex justify-content-start align-items-center gap-2">
282
+ ${data.title}
283
+ </div>
284
+ <span
285
+ style="color: #949494; font-size: 16px; font-style: normal; font-weight: 500; letter-spacing: 0.64px; text-transform: uppercase;"
251
286
  >
252
- <div class="d-flex justify-content-center flex-column" style="gap:5px;">
253
- ${(() => {
254
- if (!data.pre_order) {
255
- return ``;
256
- } else {
257
- return html` <div>${BgWidget.dangerInsignia('需預購')}</div>`;
287
+ ${data.spec.length > 0 ? data.spec.map((spec: any) => `${spec}`).join(',') : ''}
288
+ </span>
289
+ ${document.body.clientWidth < 800
290
+ ? html` <div
291
+ style="color: #393939; font-size: 16px; font-style: normal; font-weight: 400; letter-spacing: 0.64px; text-transform: uppercase;"
292
+ >
293
+ ${resetSalePriceIcon(data, index)}
294
+ NT.${parseInt(data.sale_price as any, 10).toLocaleString()}
295
+ ${document.body.clientWidth < 800 ? `x` : ''} ${data.count}
296
+ </div>`
297
+ : ''}
298
+ </div>
299
+ <div class="flex-fill"></div>
300
+ <div
301
+ class="d-sm-none d-flex flex-column align-items-end justify-content-between h-100"
302
+ style="padding: 16px 0px 4px;"
303
+ >
304
+ <div>
305
+ <i
306
+ class="fa-sharp fa-regular fa-xmark fs-4"
307
+ onclick="${gvc.event(() => {
308
+ function callMinus(index: number) {
309
+ obj.ogOrderData.lineItems[index].count = 0;
310
+ refreshOrderView();
258
311
  }
259
- })()}
260
- ${data.title}
261
- </div>
262
- <span
263
- style="color: #949494; font-size: 16px; font-style: normal; font-weight: 500; line-height: normal; letter-spacing: 0.64px; text-transform: uppercase;"
264
- >
265
- ${(() => {
266
- return data.spec.length > 0
267
- ? data.spec
268
- .map((spec: any) => {
269
- return html` ${spec}`;
270
- })
271
- .join(',')
272
- : html``;
273
- })()}
274
- </span>
275
-
276
- ${document.body.clientWidth < 800
277
- ? html` <div
278
- style="color: #393939; font-size: 16px; font-style: normal; font-weight: 400; line-height: normal; letter-spacing: 0.64px; text-transform: uppercase;"
279
- >
280
- NT.${parseInt(data.sale_price as any, 10).toLocaleString()}
281
- ${document.body.clientWidth < 800 ? `x` : ``} ${data.count}
282
- </div>`
283
- : ``}
312
+
313
+ dialog.checkYesOrNot({
314
+ text: '確定要移除此商品嗎?',
315
+ callback: bool => bool && callMinus(index),
316
+ });
317
+ })}"
318
+ ></i>
284
319
  </div>
285
- <div class="flex-fill"></div>
286
- <div
287
- class="d-sm-none d-flex align-items-center justify-content-center flex-column"
288
- style="gap:0px;"
289
- onclick="${gvc.event(() => {
290
- const n = obj.ogOrderData.lineItems?.[index]?.custom_price || 0;
291
-
292
- PosFunction.setMoney(
293
- gvc,
294
- n,
295
- money => {
296
- if (money === data.sale_price) {
297
- delete obj.ogOrderData.lineItems[index].custom_price;
298
- } else {
299
- obj.ogOrderData.lineItems[index].custom_price = money;
300
- }
301
- refreshOrderView();
302
- },
303
- '更改商品單價'
304
- );
305
- })}"
306
- >
320
+ <div class="d-flex align-items-center justify-content-center flex-column gap-0">
307
321
  ${(() => {
308
322
  function formatPrice(price: any) {
309
323
  return `$${parseInt(`${price}`, 10).toLocaleString()}`;
@@ -324,80 +338,114 @@ export class PaymentPage {
324
338
  })()}
325
339
  </div>
326
340
  </div>
327
- <div class="col-2 d-none d-sm-flex align-items-center justify-content-start">
328
- $${parseInt(data.sale_price as any, 10).toLocaleString()}
329
- </div>
341
+ </div>
342
+ <div class="col-2 d-none d-sm-flex align-items-center justify-content-start gap-2">
343
+ $ ${parseInt(data.sale_price as any, 10).toLocaleString()}
344
+ ${resetSalePriceIcon(data, index)}
345
+ </div>
346
+ <div
347
+ class="col-3 col-lg-2 d-flex align-items-center justify-content-center d-none d-sm-flex"
348
+ >
330
349
  <div
331
- class="col-3 col-lg-2 d-flex align-items-center justify-content-center d-none d-sm-flex"
332
- style="gap:10px;cursor: pointer;"
350
+ class="pos-count-button"
333
351
  onclick="${gvc.event(() => {
334
- const def = obj.ogOrderData.lineItems?.[index]?.count || 0;
335
-
336
- PosFunction.setMoney(
337
- gvc,
338
- def,
339
- count => {
340
- obj.ogOrderData.lineItems[index].count = count;
341
- refreshOrderView();
342
- },
343
- '更改商品數量'
344
- );
352
+ function callMinus(index: number) {
353
+ obj.ogOrderData.lineItems[index].count = Tool.floatAdd(
354
+ obj.ogOrderData.lineItems[index].count,
355
+ -1
356
+ );
357
+ refreshOrderView();
358
+ }
359
+
360
+ if (obj.ogOrderData.lineItems[index].count - 1 > 0) {
361
+ callMinus(index);
362
+ } else {
363
+ dialog.checkYesOrNot({
364
+ text: '確定要移除此商品嗎?',
365
+ callback: bool => bool && callMinus(index),
366
+ });
367
+ }
345
368
  })}"
346
369
  >
347
- ${Number(data.count as any).toLocaleString()}
370
+ ${this.minusSVG}
348
371
  </div>
349
- <div
350
- class="col-3 col-lg-2 d-flex align-items-center justify-content-center d-none d-sm-flex"
351
- style="gap:10px;cursor: pointer;"
352
- onclick="${gvc.event(() => {
353
- const def = obj.ogOrderData.lineItems?.[index]?.custom_price || 0;
354
-
355
- PosFunction.setMoney(
356
- gvc,
357
- def,
358
- money => {
359
- if (money === data.sale_price) {
360
- delete obj.ogOrderData.lineItems[index].custom_price;
372
+ ${data.product_category === 'weighing'
373
+ ? html`<input
374
+ class="border-0 pos-count-input"
375
+ value="${obj.ogOrderData.lineItems[index].count}"
376
+ onchange="${gvc.event(e => {
377
+ const originNum = obj.ogOrderData.lineItems[index].count;
378
+ const n = parseFloat(e.value);
379
+
380
+ if (CheckInput.isNumberString(`${n}`) && n > 0) {
381
+ obj.ogOrderData.lineItems[index].count = Tool.floatAdd(n, 0);
382
+ refreshOrderView();
361
383
  } else {
362
- obj.ogOrderData.lineItems[index].custom_price = money;
384
+ e.value = originNum;
363
385
  }
364
- refreshOrderView();
365
- },
366
- '更改商品單價'
386
+ })}"
387
+ />`
388
+ : html`<div
389
+ class="border-0 pos-count-input cursor_pointer"
390
+ style="margin-bottom: 3px;"
391
+ onclick="${gvc.event(() => {
392
+ const def = obj.ogOrderData.lineItems?.[index]?.count || 0;
393
+
394
+ PosFunction.setMoney(
395
+ gvc,
396
+ def,
397
+ count => {
398
+ obj.ogOrderData.lineItems[index].count = count;
399
+ refreshOrderView();
400
+ },
401
+ '更改商品數量'
402
+ );
403
+ })}"
404
+ >
405
+ ${data.count}
406
+ </div>`}
407
+ <div
408
+ class="pos-count-button"
409
+ onclick="${gvc.event(() => {
410
+ obj.ogOrderData.lineItems[index].count = Tool.floatAdd(
411
+ obj.ogOrderData.lineItems[index].count,
412
+ 1
367
413
  );
414
+ refreshOrderView();
368
415
  })}"
369
416
  >
370
- ${(() => {
371
- function formatPrice(price: any) {
372
- return `$${parseInt(`${price}`, 10).toLocaleString()}`;
373
- }
417
+ ${this.plusSVG}
418
+ </div>
419
+ </div>
420
+ <div
421
+ class="col-3 col-lg-2 d-flex align-items-center justify-content-center d-none d-sm-flex"
422
+ style="gap:10px;"
423
+ >
424
+ ${(() => {
425
+ function formatPrice(price: any) {
426
+ return `$${parseInt(`${price}`, 10).toLocaleString()}`;
427
+ }
374
428
 
375
- if (data.variant_sale_price && data.sale_price !== data.variant_sale_price) {
376
- return html`
377
- <span class="text-decoration-line-through"
378
- >${formatPrice(data.variant_sale_price * data.count)}</span
379
- >
380
- <span class="text-danger">${formatPrice(data.sale_price * data.count)}</span>
381
- `;
382
- }
429
+ if (data.variant_sale_price && data.sale_price !== data.variant_sale_price) {
430
+ return html`
431
+ <span class="text-decoration-line-through"
432
+ >${formatPrice(data.variant_sale_price * data.count)}</span
433
+ >
434
+ <span class="text-danger">${formatPrice(data.sale_price * data.count)}</span>
435
+ `;
436
+ }
383
437
 
384
- return html` <span>${formatPrice(data.sale_price * data.count)}</span> `;
385
- })()}
386
- </div>
438
+ return html`<span>${formatPrice(data.sale_price * data.count)}</span> `;
439
+ })()}
387
440
  </div>
388
- `;
389
- })
390
- .join(
391
- (() => {
392
- if (document.body.clientWidth < 800) {
393
- return `<div style="margin-top: 20px;background: #DDD;width: 100%;height: 1px;"></div>`;
394
- } else {
395
- return `<div style=""></div>`;
396
- }
397
- })()
398
- );
399
- }
400
- return ``;
441
+ </div>
442
+ `;
443
+ })
444
+ .join(
445
+ document.body.clientWidth < 800
446
+ ? html`<div style="margin-top: 20px;background: #DDD;width: 100%;height: 1px;"></div>`
447
+ : ''
448
+ );
401
449
  })()}
402
450
  </div>
403
451
  </div>
@@ -424,7 +472,7 @@ export class PaymentPage {
424
472
  class="w-100 d-flex align-items-center justify-content-center"
425
473
  style="cursor:pointer;flex:1; height: 65px; ${vm.type === 'old'
426
474
  ? `border-radius: 0px 10px 0px 0px; background: #FFF;`
427
- : ``}"
475
+ : ''}"
428
476
  onclick="${gvc.event(() => {
429
477
  vm.type = 'old';
430
478
  gvc.notifyDataChange(vm.id);
@@ -436,7 +484,7 @@ export class PaymentPage {
436
484
  class="w-100 d-flex align-items-center justify-content-center"
437
485
  style="cursor:pointer;flex:1; height: 65px;${vm.type === 'new'
438
486
  ? `border-radius: 10px 10px 0px 0px; background: #FFF;`
439
- : ``}"
487
+ : ''}"
440
488
  onclick="${gvc.event(() => {
441
489
  vm.type = 'new';
442
490
  gvc.notifyDataChange(vm.id);
@@ -564,7 +612,6 @@ export class PaymentPage {
564
612
  </div>
565
613
  </div>
566
614
  <div
567
- class=""
568
615
  style="display: flex; width: 44px; height: 44px; padding: 8px 10px; border-radius: 10px; border: 1px solid #DDD; justify-content: center; align-items: center; gap: 8px; flex-shrink: 0;"
569
616
  onclick="${gvc.event(() => {
570
617
  gvc.glitter.runJsInterFace('start_scan', {}, async res => {
@@ -797,7 +844,7 @@ export class PaymentPage {
797
844
  }
798
845
  },
799
846
  divCreate: {
800
- class: `w-100 my-3`,
847
+ class: 'w-100 my-3',
801
848
  style: `padding: 20px; border-radius: 10px; border: 1px #DDDDDD solid; flex-direction: column; justify-content: flex-start; align-items: flex-end; gap: 18px; display: inline-flex;`,
802
849
  },
803
850
  };
@@ -807,8 +854,8 @@ export class PaymentPage {
807
854
  return inView.join('');
808
855
  },
809
856
  divCreate: {
810
- class: ` p-3 bg-white`,
811
- style: `gap:14px;`,
857
+ class: 'p-3 bg-white',
858
+ style: 'gap: 14px;',
812
859
  },
813
860
  };
814
861
  })
@@ -823,10 +870,7 @@ export class PaymentPage {
823
870
  address: '',
824
871
  managerNote: '',
825
872
  };
826
- const saasConfig: {
827
- config: any;
828
- api: any;
829
- } = (window.parent as any).saasConfig;
873
+
830
874
  view.push(
831
875
  gvc.bindView(() => {
832
876
  const id = gvc.glitter.getUUID();
@@ -845,7 +889,7 @@ export class PaymentPage {
845
889
  let h = '';
846
890
  data.map((item: any) => {
847
891
  if (item.hidden) {
848
- return ``;
892
+ return '';
849
893
  }
850
894
  if (item.require) {
851
895
  need_check[item.key] = true;
@@ -987,11 +1031,11 @@ export class PaymentPage {
987
1031
  divCreate: {
988
1032
  class: `mx-sm-0`,
989
1033
  style: `
990
- border-radius: 10px;
991
- overflow: hidden;
992
- background: #eaeaea;
993
- box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);
994
- `,
1034
+ border-radius: 10px;
1035
+ overflow: hidden;
1036
+ background: #eaeaea;
1037
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15);
1038
+ `,
995
1039
  },
996
1040
  };
997
1041
  })}
@@ -1064,18 +1108,21 @@ export class PaymentPage {
1064
1108
  </div>
1065
1109
  `;
1066
1110
  } else if (obj.ogOrderData.user_info.shipment === 'normal') {
1067
- return `<input class="form-control mt-2" value="${obj.ogOrderData.user_info.address ?? ''}" onchange="${gvc.event(
1068
- (e, event) => {
1111
+ return html`<input
1112
+ class="form-control mt-2"
1113
+ value="${obj.ogOrderData.user_info.address ?? ''}"
1114
+ onchange="${gvc.event(e => {
1069
1115
  obj.ogOrderData.user_info.address = e.value;
1070
- }
1071
- )}" placeholder="請輸入宅配地址">`;
1116
+ })}"
1117
+ placeholder="請輸入宅配地址"
1118
+ />`;
1072
1119
  } else {
1073
- return ``;
1120
+ return '';
1074
1121
  }
1075
1122
  })()}
1076
1123
  ${(() => {
1077
1124
  if (obj.ogOrderData.user_info.shipment === 'now') {
1078
- return ``;
1125
+ return '';
1079
1126
  } else {
1080
1127
  return html` ${PaymentPage.spaceView()}
1081
1128
  <div
@@ -1106,7 +1153,7 @@ export class PaymentPage {
1106
1153
  },
1107
1154
  ]
1108
1155
  .map(dd => {
1109
- return html` <div class="mb-2 col-${dd.col} ps-0" style="">
1156
+ return html` <div class="mb-2 col-${dd.col} ps-0">
1110
1157
  <div>
1111
1158
  <div
1112
1159
  class="fw-normal mb-2 fs-6"
@@ -1137,11 +1184,14 @@ export class PaymentPage {
1137
1184
  {
1138
1185
  title: '小計總額',
1139
1186
  hint: '',
1140
- value: (
1141
- Number(orderDetail.total) +
1142
- Number(orderDetail.discount) -
1143
- Number(orderDetail.shipment_fee) +
1144
- Number(orderDetail.use_rebate)
1187
+ value: parseInt(
1188
+ `${
1189
+ Number(orderDetail.total) +
1190
+ Number(orderDetail.discount) -
1191
+ Number(orderDetail.shipment_fee) +
1192
+ Number(orderDetail.use_rebate)
1193
+ }`,
1194
+ 10
1145
1195
  ).toLocaleString(),
1146
1196
  },
1147
1197
  ...(() => {
@@ -1192,7 +1242,7 @@ export class PaymentPage {
1192
1242
  return `${isMinus} $${(dd.discount_total * isNegative).toLocaleString()}`;
1193
1243
  })()}
1194
1244
  <i
1195
- class="fa-solid fa-xmark ${dd.code || dd.id === 0 ? `` : `d-none`} fs-5"
1245
+ class="fa-solid fa-xmark ${dd.code || dd.id === 0 ? '' : `d-none`} fs-5"
1196
1246
  style="color:#949494;"
1197
1247
  onclick="${gvc.event(() => {
1198
1248
  const dialog = new ShareDialog(gvc.glitter);
@@ -1238,7 +1288,7 @@ export class PaymentPage {
1238
1288
  ${dd.title}
1239
1289
  </div>
1240
1290
  <div
1241
- class="${dd.hint ? `` : 'd-none'}"
1291
+ class="${dd.hint ? '' : 'd-none'}"
1242
1292
  style="align-self: stretch; color: #8D8D8D; font-size: 16px; font-family: Noto Sans; text-transform: uppercase; letter-spacing: 0.64px; word-wrap: break-word"
1243
1293
  >
1244
1294
  ${dd.hint}
@@ -1417,7 +1467,7 @@ export class PaymentPage {
1417
1467
  .join('');
1418
1468
  } else {
1419
1469
  return html` <div class="w-100 d-flex flex-column">
1420
- <div class="d-flex align-items-center justify-content-center w-100 " style="">
1470
+ <div class="d-flex align-items-center justify-content-center w-100 ">
1421
1471
  <div class="d-flex" style="flex:68;">${PosWidget.fontLight('付款方式')}</div>
1422
1472
  <div class="d-flex" style="flex:94;">${PosWidget.fontLight('付款金額')}</div>
1423
1473
  <div class="d-flex" style="flex:68;">${PosWidget.fontLight('狀態')}</div>
@@ -1448,7 +1498,6 @@ export class PaymentPage {
1448
1498
  <div class="d-flex" style="flex:94;">
1449
1499
  <input
1450
1500
  style="display: flex;width: calc(100% - 20px);padding: 9px 18px;border-radius: 10px;border: 1px solid #DDD;text-align: right;"
1451
- class=""
1452
1501
  value="${dd.total}"
1453
1502
  onclick="${gvc.event(() => {
1454
1503
  if (dd.paied) {
@@ -1531,8 +1580,12 @@ export class PaymentPage {
1531
1580
  }
1532
1581
  },
1533
1582
  divCreate: {
1534
- class: ``,
1535
- style: `display: flex;justify-content: space-between;margin-top: 24px;gap:15px;`,
1583
+ style: `
1584
+ display: flex;
1585
+ justify-content: space-between;
1586
+ margin-top: 24px;
1587
+ gap: 15px;
1588
+ `,
1536
1589
  },
1537
1590
  })}`,
1538
1591
  html` <div style="height:24px;"></div>`,
@@ -1549,7 +1602,7 @@ export class PaymentPage {
1549
1602
  });
1550
1603
  })
1551
1604
  ),
1552
- `<div style="height:24px;"></div>`,
1605
+ html`<div style="height:24px;"></div>`,
1553
1606
  ];
1554
1607
  if (
1555
1608
  obj.ogOrderData.pos_info.payment.length === 1 &&
@@ -1582,9 +1635,7 @@ export class PaymentPage {
1582
1635
  }
1583
1636
  view.push(PaymentPage.spaceView());
1584
1637
  const total = obj.ogOrderData.pos_info.payment
1585
- .map((dd: any) => {
1586
- return dd.total;
1587
- })
1638
+ .map((dd: any) => dd.total)
1588
1639
  .reduce((accumulator: number, currentValue: number) => accumulator + currentValue, 0);
1589
1640
 
1590
1641
  view.push(
@@ -1640,7 +1691,8 @@ export class PaymentPage {
1640
1691
  dialog.errorMessage({ text: '請選擇到店門市' });
1641
1692
  return;
1642
1693
  }
1643
- //設定POS機資訊
1694
+
1695
+ // 設定POS機資訊
1644
1696
  orderDetail.pos_info = {
1645
1697
  who: gvc.glitter.share.select_member,
1646
1698
  where_store: POSSetting.config.where_store,
@@ -1654,7 +1706,8 @@ export class PaymentPage {
1654
1706
  passData.orderStatus = 1;
1655
1707
  passData.pay_status = 1;
1656
1708
  passData.pre_order = pre_order;
1657
- //只有一種付款方式時結帳付款
1709
+
1710
+ // 只有一種付款方式時結帳付款
1658
1711
  if (
1659
1712
  obj.ogOrderData.pos_info.payment.length === 1 &&
1660
1713
  obj.ogOrderData.pos_info.payment.find((dd: any) => {
@@ -1733,7 +1786,6 @@ export class PaymentPage {
1733
1786
  <i class="fa-solid fa-down-to-bracket fs-4"></i>
1734
1787
  </div>
1735
1788
  <div
1736
- class=""
1737
1789
  style="flex:1;display: flex;padding: 10px;justify-content: center;align-items: center;border-radius: 10px;background: #FF6C02;color: #FFF;font-size: 18px;font-style: normal;font-weight: 500;line-height: normal;letter-spacing: 0.72px;"
1738
1790
  onclick="${gvc.event(() => {
1739
1791
  if (
@@ -1760,7 +1812,6 @@ export class PaymentPage {
1760
1812
  建立預購單
1761
1813
  </div>
1762
1814
  <div
1763
- class=""
1764
1815
  style="flex:1;display: flex;padding: 10px;justify-content: center;align-items: center;border-radius: 10px;background: #393939;color: #FFF;font-size: 18px;font-style: normal;font-weight: 500;line-height: normal;letter-spacing: 0.72px;"
1765
1816
  onclick="${gvc.event(() => {
1766
1817
  if (total - parseInt(orderDetail.total as any, 10) < 0) {
@@ -1791,7 +1842,7 @@ export class PaymentPage {
1791
1842
 
1792
1843
  PaymentPage.storeHistory(orderDetail);
1793
1844
  dialog.checkYesOrNot({
1794
- text: '是否確認前往結帳?',
1845
+ text: '是否確認前往結帳?',
1795
1846
  callback: response => {
1796
1847
  if (response) {
1797
1848
  paymentNext(false);
@@ -1867,9 +1918,7 @@ export class PaymentPage {
1867
1918
  async function next() {
1868
1919
  const dialog = new ShareDialog(gvc.glitter);
1869
1920
  orderDetail.code_array = orderDetail.code_array || [];
1870
- orderDetail.code_array = orderDetail.code_array.filter((dd: any) => {
1871
- return dd !== c_vm.value;
1872
- });
1921
+ orderDetail.code_array = orderDetail.code_array.filter((dd: any) => dd !== c_vm.value);
1873
1922
  orderDetail.code_array.push(c_vm.value);
1874
1923
  dialog.dataLoading({ visible: true });
1875
1924
  const od: any = (
@@ -1881,15 +1930,8 @@ export class PaymentPage {
1881
1930
  })
1882
1931
  ).response.data;
1883
1932
  dialog.dataLoading({ visible: false });
1884
- if (
1885
- !od ||
1886
- !od.voucherList.find((dd: any) => {
1887
- return dd.code === c_vm.value;
1888
- })
1889
- ) {
1890
- orderDetail.code_array = orderDetail.code_array.filter((dd: any) => {
1891
- return dd !== c_vm.value;
1892
- });
1933
+ if (!od || !od.voucherList.find((dd: any) => dd.code === c_vm.value)) {
1934
+ orderDetail.code_array = orderDetail.code_array.filter((dd: any) => dd !== c_vm.value);
1893
1935
  dialog.errorMessage({ text: '請輸入正確的優惠代碼' });
1894
1936
  } else {
1895
1937
  gvc.closeDialog();
@@ -1908,7 +1950,6 @@ export class PaymentPage {
1908
1950
  請掃描或輸入優惠代碼
1909
1951
  </div>
1910
1952
  <img
1911
- class=""
1912
1953
  style="max-width:70%;"
1913
1954
  src="https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/size1440_s*px$_s5sasfscsbs7s3sf_%E6%88%AA%E5%9C%962024-08-30%E4%B8%8B%E5%8D%882.29.361.png"
1914
1955
  />
@@ -2003,7 +2044,6 @@ export class PaymentPage {
2003
2044
  請掃描或輸入會員代碼
2004
2045
  </div>
2005
2046
  <img
2006
- class=""
2007
2047
  style="max-width:70%;"
2008
2048
  src="https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/size1440_s*px$_s5sasfscsbs7s3sf_%E6%88%AA%E5%9C%962024-08-30%E4%B8%8B%E5%8D%882.29.361.png"
2009
2049
  />
@@ -2182,9 +2222,9 @@ export class PaymentPage {
2182
2222
  PayConfig.pos_config.pos_support_finction.includes('print_order_detail')
2183
2223
  ) {
2184
2224
  if (PayConfig.deviceType === 'pos') {
2185
- //客戶聯
2225
+ // 客戶聯
2186
2226
  await IminModule.printTransactionDetails(res.response.data.orderID, invoice, glitter.share.staff_title);
2187
- //如果需要收執聯的話
2227
+ // 如果需要收執聯的話
2188
2228
  if (
2189
2229
  PayConfig.pos_config.pos_support_finction.includes('print_order_receipt') &&
2190
2230
  PayConfig.pos_config.pos_support_finction.includes('print_order_detail')
@@ -2225,34 +2265,11 @@ export class PaymentPage {
2225
2265
  <div
2226
2266
  style="position: relative;max-width:calc(100% - 20px);width: 492px;height: 223px;border-radius: 10px;background: #FFF;display: flex;flex-direction: column;align-items: center;justify-content: center;"
2227
2267
  >
2228
- <svg
2229
- xmlns="http://www.w3.org/2000/svg"
2230
- width="14"
2231
- height="14"
2232
- viewBox="0 0 14 14"
2233
- fill="none"
2234
- style="position: absolute;top: 12px;right: 12px;cursor: pointer;"
2235
- onclick="${gvc.event(() => {
2268
+ ${PaymentPage.checkSVG(
2269
+ gvc.event(() => {
2236
2270
  gvc.glitter.closeDiaLog();
2237
- })}"
2238
- >
2239
- <path d="M1 1L13 13" stroke="#393939" stroke-linecap="round" />
2240
- <path d="M13 1L1 13" stroke="#393939" stroke-linecap="round" />
2241
- </svg>
2242
-
2243
- <svg xmlns="http://www.w3.org/2000/svg" width="75" height="75" viewBox="0 0 75 75" fill="none">
2244
- <g clip-path="url(#clip0_9850_171427)">
2245
- <path
2246
- d="M37.5 7.03125C45.5808 7.03125 53.3307 10.2413 59.0447 15.9553C64.7587 21.6693 67.9688 29.4192 67.9688 37.5C67.9688 45.5808 64.7587 53.3307 59.0447 59.0447C53.3307 64.7587 45.5808 67.9688 37.5 67.9688C29.4192 67.9688 21.6693 64.7587 15.9553 59.0447C10.2413 53.3307 7.03125 45.5808 7.03125 37.5C7.03125 29.4192 10.2413 21.6693 15.9553 15.9553C21.6693 10.2413 29.4192 7.03125 37.5 7.03125ZM37.5 75C47.4456 75 56.9839 71.0491 64.0165 64.0165C71.0491 56.9839 75 47.4456 75 37.5C75 27.5544 71.0491 18.0161 64.0165 10.9835C56.9839 3.95088 47.4456 0 37.5 0C27.5544 0 18.0161 3.95088 10.9835 10.9835C3.95088 18.0161 0 27.5544 0 37.5C0 47.4456 3.95088 56.9839 10.9835 64.0165C18.0161 71.0491 27.5544 75 37.5 75ZM54.0527 30.6152C55.4297 29.2383 55.4297 27.0117 54.0527 25.6494C52.6758 24.2871 50.4492 24.2725 49.0869 25.6494L32.8271 41.9092L25.9424 35.0244C24.5654 33.6475 22.3389 33.6475 20.9766 35.0244C19.6143 36.4014 19.5996 38.6279 20.9766 39.9902L30.3516 49.3652C31.7285 50.7422 33.9551 50.7422 35.3174 49.3652L54.0527 30.6152Z"
2247
- fill="#393939"
2248
- />
2249
- </g>
2250
- <defs>
2251
- <clipPath id="clip0_9850_171427">
2252
- <rect width="75" height="75" fill="white" />
2253
- </clipPath>
2254
- </defs>
2255
- </svg>
2271
+ })
2272
+ )}
2256
2273
  <div
2257
2274
  style="text-align: center;color: #393939;font-size: 16px;font-weight: 400;line-height: 160%;margin-top: 24px;"
2258
2275
  >
@@ -2264,22 +2281,18 @@ export class PaymentPage {
2264
2281
  },
2265
2282
  'orderFinish',
2266
2283
  {
2267
- dismiss: () => {
2268
- // vm.type = "list";
2269
- },
2284
+ dismiss: () => {},
2270
2285
  }
2271
2286
  );
2272
2287
  }
2273
2288
  });
2274
2289
  }
2275
2290
 
2276
- //不開立電子發票直接執行
2291
+ // 不開立電子發票直接執行
2277
2292
  if (
2278
2293
  (await ApiShop.getInvoiceType()).response.method === 'nouse' ||
2279
2294
  orderDetail.pos_info.payment
2280
- .map((dd: any) => {
2281
- return dd.total;
2282
- })
2295
+ .map((dd: any) => dd.total)
2283
2296
  .reduce((accumulator: number, currentValue: number) => accumulator + currentValue, 0) < orderDetail.total ||
2284
2297
  !PayConfig.pos_config.pos_support_finction.includes('print_invoice')
2285
2298
  ) {
@@ -2312,22 +2325,22 @@ export class PaymentPage {
2312
2325
  {
2313
2326
  title: PayConfig.deviceType === 'pos' || ConnectionMode.on_connected_device ? `列印` : `寄送`,
2314
2327
  value: 'print',
2315
- icon: `<i class="fa-regular fa-print"></i>`,
2328
+ icon: html`<i class="fa-regular fa-print"></i>`,
2316
2329
  },
2317
2330
  {
2318
2331
  title: `載具`,
2319
2332
  value: 'carry',
2320
- icon: `<i class="fa-regular fa-mobile"></i>`,
2333
+ icon: html`<i class="fa-regular fa-mobile"></i>`,
2321
2334
  },
2322
2335
  {
2323
2336
  title: `統編`,
2324
2337
  value: 'company',
2325
- icon: `<i class="fa-regular fa-building"></i>`,
2338
+ icon: html`<i class="fa-regular fa-building"></i>`,
2326
2339
  },
2327
2340
  {
2328
2341
  title: `不開立`,
2329
2342
  value: 'nouse',
2330
- icon: `<i class="fa-solid fa-ban"></i>`,
2343
+ icon: html`<i class="fa-solid fa-ban"></i>`,
2331
2344
  },
2332
2345
  ];
2333
2346
  return btnArray
@@ -2346,7 +2359,7 @@ export class PaymentPage {
2346
2359
  gvc.recreateView();
2347
2360
  })}"
2348
2361
  >
2349
- <div style="" class="fs-2">${btn.icon}</div>
2362
+ <div class="fs-2">${btn.icon}</div>
2350
2363
  <div style="font-size: 16px;font-weight: 500;letter-spacing: 0.64px;">${btn.title}</div>
2351
2364
  </div>
2352
2365
  </div>
@@ -2422,7 +2435,7 @@ export class PaymentPage {
2422
2435
  </div>
2423
2436
  </div>`;
2424
2437
  } else {
2425
- return ``;
2438
+ return '';
2426
2439
  }
2427
2440
  })()}
2428
2441
  <div
@@ -2432,9 +2445,7 @@ export class PaymentPage {
2432
2445
  <div
2433
2446
  class="flex-fill"
2434
2447
  style="border-radius: 10px;background: #393939;padding: 12px 24px;color: #FFF;text-align:center;"
2435
- onclick="${gvc.event(() => {
2436
- next();
2437
- })}"
2448
+ onclick="${gvc.event(() => next())}"
2438
2449
  >
2439
2450
  確定
2440
2451
  </div>
@@ -2446,7 +2457,6 @@ export class PaymentPage {
2446
2457
  'selectInvoice',
2447
2458
  {
2448
2459
  dismiss: () => {
2449
- // vm.type = "list";
2450
2460
  gvc.glitter.share.scan_back = () => {};
2451
2461
  },
2452
2462
  }
@@ -2486,4 +2496,217 @@ export class PaymentPage {
2486
2496
  callback();
2487
2497
  }
2488
2498
  }
2499
+
2500
+ static minusSVG = html`<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 10 10" fill="none">
2501
+ <path
2502
+ d="M9.64314 5C9.64314 5.3457 9.32394 5.625 8.92885 5.625H1.07171C0.676618 5.625 0.357422 5.3457 0.357422 5C0.357422 4.6543 0.676618 4.375 1.07171 4.375H8.92885C9.32394 4.375 9.64314 4.6543 9.64314 5Z"
2503
+ fill="white"
2504
+ />
2505
+ </svg>`;
2506
+
2507
+ static plusSVG = html`<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 10 10" fill="none">
2508
+ <path
2509
+ d="M5.76923 0.769231C5.76923 0.34375 5.42548 0 5 0C4.57452 0 4.23077 0.34375 4.23077 0.769231V4.23077H0.769231C0.34375 4.23077 0 4.57452 0 5C0 5.42548 0.34375 5.76923 0.769231 5.76923H4.23077V9.23077C4.23077 9.65625 4.57452 10 5 10C5.42548 10 5.76923 9.65625 5.76923 9.23077V5.76923H9.23077C9.65625 5.76923 10 5.42548 10 5C10 4.57452 9.65625 4.23077 9.23077 4.23077H5.76923V0.769231Z"
2510
+ fill="white"
2511
+ />
2512
+ </svg>`;
2513
+
2514
+ static checkSVG = (clickEvent: string) =>
2515
+ html`<svg
2516
+ xmlns="http://www.w3.org/2000/svg"
2517
+ width="14"
2518
+ height="14"
2519
+ viewBox="0 0 14 14"
2520
+ fill="none"
2521
+ style="position: absolute;top: 12px;right: 12px;cursor: pointer;"
2522
+ onclick="${clickEvent}"
2523
+ >
2524
+ <path d="M1 1L13 13" stroke="#393939" stroke-linecap="round" />
2525
+ <path d="M13 1L1 13" stroke="#393939" stroke-linecap="round" />
2526
+ </svg>
2527
+
2528
+ <svg xmlns="http://www.w3.org/2000/svg" width="75" height="75" viewBox="0 0 75 75" fill="none">
2529
+ <g clip-path="url(#clip0_9850_171427)">
2530
+ <path
2531
+ d="M37.5 7.03125C45.5808 7.03125 53.3307 10.2413 59.0447 15.9553C64.7587 21.6693 67.9688 29.4192 67.9688 37.5C67.9688 45.5808 64.7587 53.3307 59.0447 59.0447C53.3307 64.7587 45.5808 67.9688 37.5 67.9688C29.4192 67.9688 21.6693 64.7587 15.9553 59.0447C10.2413 53.3307 7.03125 45.5808 7.03125 37.5C7.03125 29.4192 10.2413 21.6693 15.9553 15.9553C21.6693 10.2413 29.4192 7.03125 37.5 7.03125ZM37.5 75C47.4456 75 56.9839 71.0491 64.0165 64.0165C71.0491 56.9839 75 47.4456 75 37.5C75 27.5544 71.0491 18.0161 64.0165 10.9835C56.9839 3.95088 47.4456 0 37.5 0C27.5544 0 18.0161 3.95088 10.9835 10.9835C3.95088 18.0161 0 27.5544 0 37.5C0 47.4456 3.95088 56.9839 10.9835 64.0165C18.0161 71.0491 27.5544 75 37.5 75ZM54.0527 30.6152C55.4297 29.2383 55.4297 27.0117 54.0527 25.6494C52.6758 24.2871 50.4492 24.2725 49.0869 25.6494L32.8271 41.9092L25.9424 35.0244C24.5654 33.6475 22.3389 33.6475 20.9766 35.0244C19.6143 36.4014 19.5996 38.6279 20.9766 39.9902L30.3516 49.3652C31.7285 50.7422 33.9551 50.7422 35.3174 49.3652L54.0527 30.6152Z"
2532
+ fill="#393939"
2533
+ />
2534
+ </g>
2535
+ <defs>
2536
+ <clipPath id="clip0_9850_171427">
2537
+ <rect width="75" height="75" fill="white" />
2538
+ </clipPath>
2539
+ </defs>
2540
+ </svg>`;
2541
+
2542
+ static addStyle(gvc: GVC) {
2543
+ const isPhone = document.body.offsetWidth < 800;
2544
+ gvc.addStyle(`
2545
+ .pos-select {
2546
+ font-size: 18px;
2547
+ width: ${isPhone ? '100%' : '131px'};
2548
+ height: 51px;
2549
+ white-space: nowrap;
2550
+ display: flex;
2551
+ padding: 12px;
2552
+ justify-content: center;
2553
+ align-items: center;
2554
+ border-radius: 10px;
2555
+ box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.1);
2556
+ }
2557
+
2558
+ .pos-category {
2559
+ font-size: 18px;
2560
+ width: 131px;
2561
+ height: 51px;
2562
+ margin-right: 16px;
2563
+ white-space: nowrap;
2564
+ display: flex;
2565
+ padding: 12px 24px;
2566
+ justify-content: center;
2567
+ align-items: center;
2568
+ border-radius: 10px;
2569
+ box-shadow: 0px 0px 7px 0px rgba(0, 0, 0, 0.1);
2570
+ }
2571
+
2572
+ .pos-product-card {
2573
+ flex-basis: 188px;
2574
+ flex-grow: 1;
2575
+ border-radius: 10px;
2576
+ box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.08);
2577
+ }
2578
+
2579
+ .pos-bgr-image {
2580
+ border-radius: 10px 10px 0 0;
2581
+ background: 50% / cover no-repeat;
2582
+ }
2583
+
2584
+ .pos-product-title {
2585
+ font-size: 18px;
2586
+ width: 100%;
2587
+ overflow: hidden;
2588
+ display: -webkit-box;
2589
+ -webkit-line-clamp: 2;
2590
+ text-overflow: ellipsis;
2591
+ word-break: break-word;
2592
+ -webkit-box-orient: vertical;
2593
+ }
2594
+
2595
+ .pos-product-container {
2596
+ overflow: scroll;
2597
+ max-height: 100%;
2598
+ padding-bottom: 100px !important;
2599
+ ${
2600
+ isPhone
2601
+ ? `
2602
+ padding-left: 12px;
2603
+ padding-right: 12px;
2604
+ justify-content: space-between;
2605
+ `
2606
+ : `
2607
+ gap: 26px;
2608
+ margin-left: 32px;
2609
+ margin-right: 32px;
2610
+ `
2611
+ }
2612
+ }
2613
+
2614
+ .pos-drawer {
2615
+ height: 100%;
2616
+ width: 352px;
2617
+ max-width: 100%;
2618
+ overflow: auto;
2619
+ background: #fff;
2620
+ box-shadow: 1px 0 10px 0 rgba(0, 0, 0, 0.1);
2621
+ }
2622
+
2623
+ .pos-check-container {
2624
+ height: 50px;
2625
+ margin-bottom: 24px;
2626
+ margin-top: ${gvc.glitter.share.top_inset}px;
2627
+ }
2628
+
2629
+ .pos-check-loading {
2630
+ background: #ffb400;
2631
+ color: #393939;
2632
+ gap: 10px;
2633
+ }
2634
+
2635
+ .pos-cart-list {
2636
+ color: #393939;
2637
+ font-size: 32px;
2638
+ font-weight: 700;
2639
+ letter-spacing: 3px;
2640
+ }
2641
+
2642
+ .pos-cart-image {
2643
+ height: 67px;
2644
+ width: 66px;
2645
+ margin-right: 12px;
2646
+ min-height: 67px;
2647
+ min-width: 66px;
2648
+ background: 50% / cover;
2649
+ }
2650
+
2651
+ .pos-spec {
2652
+ color: #949494;
2653
+ font-size: 16px;
2654
+ font-style: normal;
2655
+ font-weight: 500;
2656
+ }
2657
+
2658
+ .pos-count-button {
2659
+ display: flex;
2660
+ width: 30px;
2661
+ height: 30px;
2662
+ padding: 8px;
2663
+ justify-content: center;
2664
+ align-items: center;
2665
+ border-radius: 10px;
2666
+ background: #393939;
2667
+ }
2668
+
2669
+ .pos-count-input {
2670
+ width: 60px;
2671
+ height: 25px;
2672
+ color: #393939;
2673
+ font-size: 18px;
2674
+ font-weight: 500;
2675
+ text-align: center;
2676
+ }
2677
+
2678
+ .pos-subtotal {
2679
+ color: #393939;
2680
+ font-size: 18px;
2681
+ font-style: normal;
2682
+ font-weight: 500;
2683
+ letter-spacing: 0.72px;
2684
+ }
2685
+
2686
+ .pos-price-container {
2687
+ margin-top: 24px;
2688
+ border-radius: 10px;
2689
+ border: 1px solid #ddd;
2690
+ background: #fff;
2691
+ display: flex;
2692
+ padding: 24px;
2693
+ flex-direction: column;
2694
+ justify-content: center;
2695
+ }
2696
+
2697
+ .pos-goto-checkout {
2698
+ margin-top: 32px;
2699
+ display: flex;
2700
+ padding: 12px 24px;
2701
+ justify-content: center;
2702
+ align-items: center;
2703
+ border-radius: 10px;
2704
+ background: #393939;
2705
+ font-size: 20px;
2706
+ font-style: normal;
2707
+ font-weight: 500;
2708
+ color: #fff;
2709
+ }
2710
+ `);
2711
+ }
2489
2712
  }