@feedmepos/mf-order-setting 0.0.67-dev → 0.0.68-prod

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 (51) hide show
  1. package/dist/{KioskDevicesView-mu33XbDe.js → KioskDevicesView-CACKpFoO.js} +1 -1
  2. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-DnnwwP5B.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-BJIOCfEr.js} +3 -3
  3. package/dist/{KioskSettingView-CAwO1SeK.js → KioskSettingView-BVjtaNjl.js} +4 -4
  4. package/dist/{KioskView-pvtKqW3e.js → KioskView-6K48HkE4.js} +4 -4
  5. package/dist/OrderSettingsView-CStNEAkv.js +32126 -0
  6. package/dist/{app-MjAVO4M6.js → app-CAyePmCd.js} +229 -215
  7. package/dist/app.js +1 -1
  8. package/dist/{dayjs.min-ClRk0CwC.js → dayjs.min-BytKqRJv.js} +1 -1
  9. package/dist/frontend/mf-order/src/app.d.ts +11 -0
  10. package/dist/frontend/mf-order/src/main.d.ts +11 -0
  11. package/dist/frontend/mf-order/src/stores/kiosk/index.d.ts +45 -0
  12. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +22 -0
  13. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +15 -0
  14. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +2 -2
  15. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  16. package/dist/{index-D7iNmBKX.js → index-BcbPl43J.js} +6 -6
  17. package/dist/{index-BWDduW_i.js → index-DkRVfP6c.js} +2 -2
  18. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +36 -18
  19. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +7 -2
  20. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +92 -60
  21. package/dist/package/entity/kiosk/kiosk.do.d.ts +464 -0
  22. package/dist/package/entity/kiosk/kiosk.dto.d.ts +565 -0
  23. package/dist/package/entity/order/order-item/order-item.dto.d.ts +125 -0
  24. package/dist/package/entity/order/order.do.d.ts +18 -0
  25. package/dist/package/entity/order/order.dto.d.ts +433 -0
  26. package/dist/package/entity/order-platform/external/menu/external-master-menu.do.d.ts +5 -0
  27. package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +3 -3
  28. package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +8 -8
  29. package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +19 -19
  30. package/dist/package/entity/order-platform/external/order/external-order.enum.d.ts +1 -1
  31. package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +3 -3
  32. package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +3 -3
  33. package/dist/package/entity/order-platform/menu.dto.d.ts +0 -67
  34. package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
  35. package/dist/package/entity/order-setting/dine-in/dine-in.do.d.ts +29 -0
  36. package/dist/package/entity/order-setting/dine-in/dine-in.dto.d.ts +29 -0
  37. package/dist/package/entity/order-setting/order-setting.do.d.ts +29 -0
  38. package/dist/package/entity/order-setting/order-setting.dto.d.ts +58 -0
  39. package/dist/package/entity/printer/printer.do.d.ts +114 -0
  40. package/dist/package/entity/queue/queue.dto.d.ts +93 -0
  41. package/dist/package/entity/restaurant/restaurant.dto.d.ts +3 -0
  42. package/dist/queue-transfer.dto-BB0t5A1B.js +70184 -0
  43. package/package.json +5 -3
  44. package/src/locales/en-US.json +8 -0
  45. package/src/locales/ja-JP.json +1 -0
  46. package/src/locales/th-TH.json +1 -0
  47. package/src/locales/zh-CN.json +1 -0
  48. package/src/views/order-settings/dine-in/DineInSetting.vue +75 -0
  49. package/src/views/order-settings/general/GeneralSetting.vue +12 -0
  50. package/dist/OrderSettingsView-DgLwwgzb.js +0 -31258
  51. package/dist/queue-transfer.dto-CXRjYyMe.js +0 -45343
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-order-setting",
3
- "version": "0.0.67-dev",
3
+ "version": "0.0.68-prod",
4
4
  "type": "module",
5
5
  "module": "./dist/app.js",
6
6
  "license": "UNLICENSED",
@@ -28,8 +28,8 @@
28
28
  "format": "prettier --write src/"
29
29
  },
30
30
  "dependencies": {
31
- "@feedmepos/core": "^2.15.17",
32
- "@feedmepos/menu": "^1.9.1",
31
+ "@feedmepos/core": "^2.15.21",
32
+ "@feedmepos/menu": "^1.9.5",
33
33
  "@feedmepos/mf-common": "1.20.0-beta.2",
34
34
  "@feedmepos/ordering": "^0.0.3",
35
35
  "@feedmepos/ui-library": "1.5.2-beta.1",
@@ -44,6 +44,7 @@
44
44
  "i18next-vue": "^4.0.0",
45
45
  "moment": "^2.30.1",
46
46
  "pinia": "^2.1.7",
47
+ "semver": "^7.7.1",
47
48
  "vue": "^3.3.8",
48
49
  "vue-i18n": "^10.0.5",
49
50
  "vue-router": "^4.2.5",
@@ -55,6 +56,7 @@
55
56
  "@tsconfig/node18": "^18.2.2",
56
57
  "@types/google.maps": "^3.55.12",
57
58
  "@types/node": "^18.17.17",
59
+ "@types/semver": "^7.5.0",
58
60
  "@vitejs/plugin-vue": "^4.3.4",
59
61
  "@vue/eslint-config-prettier": "^8.0.0",
60
62
  "@vue/eslint-config-typescript": "^12.0.0",
@@ -246,6 +246,13 @@
246
246
  "printChecklistSublabel": "Online order only",
247
247
  "overridePax": "Overwrite Bill Pax",
248
248
  "overridePaxSublabel": "Incoming order will overwrite the existing bill pax",
249
+ "dineInRemarkEnabled": "Customer order remark",
250
+ "dineInRemarkEnabledSublabel": "Allow customers to attach a remark when ordering dine-in.",
251
+ "dineInRemarkEnabledRequiresPosVersion": "Requires POS version {version} or above.",
252
+ "dineInRemarkMergeAction": "On bill merge, with existing remark",
253
+ "dineInRemarkMergeActionKeep": "Keep previous",
254
+ "dineInRemarkMergeActionOverride": "Override with new",
255
+ "dineInRemarkMergeActionConcat": "Append (newline)",
249
256
  "codeSettings": "Queue Code Settings",
250
257
  "addCodeSetting": "Add Queue Code Setting",
251
258
  "current": "Current",
@@ -292,6 +299,7 @@
292
299
  "staticQRcodeSublabel": "Customer can order with static QR code",
293
300
  "status": "Status",
294
301
  "subItemDisplayModeListView": "Sub Item List View",
302
+ "hideProductCode": "Hide Product Code",
295
303
  "submitOrderInstruction": "Submit order instruction",
296
304
  "success": "SUCCESS",
297
305
  "sunday": "Sunday",
@@ -287,6 +287,7 @@
287
287
  "staticQRcodeSublabel": "お客様は静的QRコードで注文できます",
288
288
  "status": "ステータス",
289
289
  "subItemDisplayModeListView": "サブアイテムリストビュー",
290
+ "hideProductCode": "商品コードを非表示",
290
291
  "submitOrderInstruction": "注文送信指示",
291
292
  "success": "成功",
292
293
  "sunday": "日曜日",
@@ -288,6 +288,7 @@
288
288
  "staticQRcodeSublabel": "ลูกค้าสามารถสั่งซื้อโดยใช้รหัส QR แบบคงที่",
289
289
  "status": "สถานะ",
290
290
  "subItemDisplayModeListView": "โหมดรายการผลิตภัณฑ์เพิ่มเติม",
291
+ "hideProductCode": "ซ่อนรหัสสินค้า",
291
292
  "submitOrderInstruction": "ส่งข้อความสั่งซื้อ",
292
293
  "success": "สำเร็จ",
293
294
  "sunday": "วันอาทิตย์",
@@ -294,6 +294,7 @@
294
294
  "staticQRcodeSublabel": "客户可以通过静态二维码下单",
295
295
  "status": "状态",
296
296
  "subItemDisplayModeListView": "附加产品列表模式",
297
+ "hideProductCode": "隐藏产品编号",
297
298
  "submitOrderInstruction": "提交订单文本",
298
299
  "success": "成功",
299
300
  "sunday": "星期日",
@@ -33,6 +33,26 @@
33
33
  :sublabel="t('order.customerItemRemarkSublabel')"
34
34
  label-placement="right"
35
35
  />
36
+ <FmSwitch
37
+ :model-value="dineInRemarkEnabled"
38
+ :disabled="!posSupportsRemarkMerge"
39
+ :label="t('order.dineInRemarkEnabled')"
40
+ :sublabel="
41
+ posSupportsRemarkMerge
42
+ ? t('order.dineInRemarkEnabledSublabel')
43
+ : t('order.dineInRemarkEnabledRequiresPosVersion', { version: REMARK_MERGE_MIN_POS_VERSION })
44
+ "
45
+ label-placement="right"
46
+ @update:model-value="updateDineInRemarkEnabled"
47
+ />
48
+ <div v-if="dineInRemarkEnabled && posSupportsRemarkMerge" class="flex flex-col gap-2 ml-5">
49
+ <span class="fm-typo-en-body-md-600">{{ t('order.dineInRemarkMergeAction') }}</span>
50
+ <FmSelect
51
+ :model-value="dineInRemarkMergeAction"
52
+ @update:model-value="updateDineInRemarkMergeAction"
53
+ :items="dineInRemarkMergeActionOptions"
54
+ />
55
+ </div>
36
56
  <FmSwitch
37
57
  v-model="dineInSetting.acceptQueue as boolean"
38
58
  value="acceptQueue"
@@ -125,6 +145,7 @@ import { useLoading } from '@/composables/loading'
125
145
  import { useCoreStore } from '@feedmepos/mf-common'
126
146
  import PaymentType from './PaymentType.vue'
127
147
  import { utils } from '@feedmepos/core'
148
+ import semver from 'semver'
128
149
  import { useI18n } from '@feedmepos/mf-common'
129
150
  import { OrderSettingApi } from '@/api/order-setting'
130
151
  import { type OrderSettingsDto } from '@entity'
@@ -210,6 +231,60 @@ function updateOverridePax(v: boolean) {
210
231
  }
211
232
  }
212
233
 
234
+ // Threshold mirrors backend `posSupportsDineInRemarkMerge` — must be kept
235
+ // in lockstep. Restaurants on older POS see the toggle disabled with a
236
+ // "requires version X+" hint instead of a hidden control.
237
+ const REMARK_MERGE_GATE_VERSION = '7.12.12'
238
+ const REMARK_MERGE_MIN_POS_VERSION = '7.12.13'
239
+ const posSupportsRemarkMerge = computed<boolean>(() => {
240
+ const version = currentRestaurant.value?.posVersion
241
+ if (!version) return false
242
+ return semver.gt(version, REMARK_MERGE_GATE_VERSION)
243
+ })
244
+
245
+ const dineInRemarkEnabled = computed<boolean>(
246
+ () => orderSetting.value?.dineInSettings?.remark?.enabled ?? false
247
+ )
248
+
249
+ type RemarkMergeAction = 'keep' | 'override' | 'concat'
250
+
251
+ const dineInRemarkMergeAction = computed<RemarkMergeAction>(
252
+ () => (orderSetting.value?.dineInSettings?.remark?.mergeAction as RemarkMergeAction) ?? 'override'
253
+ )
254
+
255
+ const dineInRemarkMergeActionOptions = computed(() => [
256
+ { label: t('order.dineInRemarkMergeActionKeep'), value: 'keep' },
257
+ { label: t('order.dineInRemarkMergeActionOverride'), value: 'override' },
258
+ { label: t('order.dineInRemarkMergeActionConcat'), value: 'concat' }
259
+ ])
260
+
261
+ function ensureRemarkSettings() {
262
+ if (!orderSetting.value) return
263
+ if (!orderSetting.value.dineInSettings) {
264
+ orderSetting.value.dineInSettings = { overridePax: true }
265
+ }
266
+ if (!orderSetting.value.dineInSettings.remark) {
267
+ orderSetting.value.dineInSettings.remark = {
268
+ enabled: false,
269
+ mergeAction: 'override'
270
+ }
271
+ }
272
+ }
273
+
274
+ function updateDineInRemarkEnabled(v: boolean) {
275
+ ensureRemarkSettings()
276
+ if (orderSetting.value?.dineInSettings?.remark) {
277
+ orderSetting.value.dineInSettings.remark.enabled = v
278
+ }
279
+ }
280
+
281
+ function updateDineInRemarkMergeAction(v: RemarkMergeAction) {
282
+ ensureRemarkSettings()
283
+ if (orderSetting.value?.dineInSettings?.remark) {
284
+ orderSetting.value.dineInSettings.remark.mergeAction = v
285
+ }
286
+ }
287
+
213
288
  function initDineInSetting(): FdoRestaurantDineIn {
214
289
  return {
215
290
  ignoreStock: false,
@@ -16,6 +16,12 @@
16
16
  @update:model-value="updateSubItemDisplayMode"
17
17
  label-placement="right"
18
18
  ></FmSwitch>
19
+ <FmSwitch
20
+ :model-value="!!orderSetting?.hideProductCode"
21
+ :label="t('order.hideProductCode')"
22
+ @update:model-value="updateHideProductCode"
23
+ label-placement="right"
24
+ ></FmSwitch>
19
25
 
20
26
  <div class="flex-grow fm-typo-en-title-sm-600 mt-8 mb-2">{{ t('order.orderNumberSettings') }}</div>
21
27
 
@@ -187,6 +193,12 @@ function updateSeq(key: SequenceKey, dtoKey: string, dto?: number) {
187
193
  }
188
194
  }
189
195
 
196
+ function updateHideProductCode(v: boolean) {
197
+ if (orderSetting.value) {
198
+ orderSetting.value.hideProductCode = v
199
+ }
200
+ }
201
+
190
202
  function updateSubItemDisplayMode(v: boolean) {
191
203
  if (orderSetting.value?.v3Settings) {
192
204
  if (v) {