@feedmepos/mf-order-setting 0.0.13 → 0.0.14

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 (91) hide show
  1. package/dist/KioskSettingView-BYv2A8Xy.js +4 -0
  2. package/dist/{app-E2uM-UYx.js → app-vuQcAuTZ.js} +42464 -41973
  3. package/dist/app.js +1 -1
  4. package/dist/frontend/mf-order/src/main.d.ts +472 -0
  5. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +12 -0
  6. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +1 -0
  7. package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +1 -1
  8. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +0 -8
  9. package/dist/frontend/mf-order/src/views/order-settings/general/GeneralSetting.vue.d.ts +2 -0
  10. package/dist/frontend/mf-order/src/views/order-settings/pickup/PaymentSidesheet.vue.d.ts +2 -16
  11. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  12. package/dist/package/entity/booking/booking.do.d.ts +60 -1025
  13. package/dist/package/entity/delivery/delivery.dto.d.ts +39 -208
  14. package/dist/package/entity/delivery/gateway/pandago.dto.d.ts +6 -6
  15. package/dist/package/entity/food-court/order.dto.d.ts +1607 -13450
  16. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +1413 -291
  17. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +602 -99
  18. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +1182 -154
  19. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +66 -875
  20. package/dist/package/entity/order/delivery/delivery.do.d.ts +12 -0
  21. package/dist/package/entity/order/menu/menu.dto.d.ts +6 -1
  22. package/dist/package/entity/order/order-item/order-item.dto.d.ts +847 -40
  23. package/dist/package/entity/order/order.do.d.ts +9 -3
  24. package/dist/package/entity/order/order.dto.d.ts +2639 -8399
  25. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +12 -205
  26. package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +12 -205
  27. package/dist/package/entity/order-platform/menu.dto.d.ts +48 -48
  28. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +12 -205
  29. package/dist/package/entity/order-setting/order-setting.do.d.ts +8 -0
  30. package/dist/package/entity/order-setting/order-setting.dto.d.ts +16 -0
  31. package/dist/package/entity/order-setting/v3/v3.do.d.ts +3 -0
  32. package/dist/package/entity/order-setting/v3/v3.dto.d.ts +3 -0
  33. package/dist/package/entity/queue/queue.do.d.ts +50 -50
  34. package/dist/package/entity/restaurant/restaurant.dto.d.ts +10 -0
  35. package/package.json +3 -2
  36. package/src/i18n.d.ts +11 -0
  37. package/src/locales/en-US.json +235 -0
  38. package/src/locales/zh-CN.json +235 -0
  39. package/src/main.ts +23 -1
  40. package/src/stores/restaurant/index.ts +31 -3
  41. package/src/stores/table-settings.ts +0 -5
  42. package/src/views/kiosk/KioskSummary.vue +16 -13
  43. package/src/views/kiosk/KioskView.vue +13 -10
  44. package/src/views/kiosk/devices/KioskDeviceCard.vue +10 -7
  45. package/src/views/kiosk/devices/KioskDevicesView.vue +6 -4
  46. package/src/views/kiosk/devices/KioskOtpDialog.vue +4 -1
  47. package/src/views/kiosk/devices/KioskUnbindConfirm.vue +3 -1
  48. package/src/views/kiosk/settings/KioskDineInSection.vue +4 -1
  49. package/src/views/kiosk/settings/KioskDisplayStandSection.vue +14 -11
  50. package/src/views/kiosk/settings/KioskPickAtCounterSection.vue +4 -1
  51. package/src/views/kiosk/settings/KioskSettingView.vue +8 -5
  52. package/src/views/kiosk/settings/KioskTakeawaySection.vue +4 -1
  53. package/src/views/order-settings/OrderSettingsView.vue +13 -7
  54. package/src/views/order-settings/components/RestaurantSelector.vue +5 -2
  55. package/src/views/order-settings/delivery/DeliverySetting.vue +113 -60
  56. package/src/views/order-settings/delivery/components/ManualIntegratedDeliverySetting.vue +11 -8
  57. package/src/views/order-settings/delivery/components/TaxInput.vue +1 -1
  58. package/src/views/order-settings/delivery/inhouse/CurrencyInput.vue +2 -2
  59. package/src/views/order-settings/delivery/inhouse/DeliveryCustomTime.vue +31 -0
  60. package/src/views/order-settings/delivery/inhouse/DeliveryOrder.vue +12 -9
  61. package/src/views/order-settings/delivery/inhouse/DeliveryTime.vue +9 -6
  62. package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +63 -68
  63. package/src/views/order-settings/delivery/inhouse/TimePicker.vue +4 -1
  64. package/src/views/order-settings/delivery/inhouse/ZoneDialog.vue +7 -4
  65. package/src/views/order-settings/delivery/integrated-delivery/FeedmeDelivery.vue +38 -15
  66. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaCampaignDialog.vue +7 -4
  67. package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +7 -4
  68. package/src/views/order-settings/delivery/integrated-delivery/IntegratedDelivery.vue +99 -41
  69. package/src/views/order-settings/dinein/DineInSetting.vue +15 -12
  70. package/src/views/order-settings/dinein/OfflinePaymentTypeDialog.vue +9 -6
  71. package/src/views/order-settings/dinein/OfflinePaymentTypeDialogContent.vue +6 -3
  72. package/src/views/order-settings/dinein/PaymentType.vue +9 -6
  73. package/src/views/order-settings/general/GeneralSetting.vue +103 -0
  74. package/src/views/order-settings/pickup/AddressInput.vue +5 -2
  75. package/src/views/order-settings/pickup/CustomPayment.vue +10 -8
  76. package/src/views/order-settings/pickup/PaymentSidesheet.vue +114 -63
  77. package/src/views/order-settings/pickup/PickUpPointDialog.vue +7 -4
  78. package/src/views/order-settings/pickup/PickUpPointDialogContent.vue +7 -4
  79. package/src/views/order-settings/pickup/PickUpSetting.vue +13 -10
  80. package/src/views/order-settings/pickup/PickUpSettingDialog.vue +13 -8
  81. package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +37 -37
  82. package/src/views/order-settings/pickup/Preorder.vue +10 -8
  83. package/src/views/order-settings/servicecharge/RateInput.vue +12 -5
  84. package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +44 -24
  85. package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +16 -13
  86. package/src/views/order-settings/sms/SmsSetting.vue +105 -29
  87. package/tsconfig.app.json +3 -1
  88. package/tsconfig.json +2 -1
  89. package/tsconfig.node.json +3 -1
  90. package/vite.config.ts +2 -1
  91. package/dist/KioskSettingView-_h6R-Crz.js +0 -4
@@ -0,0 +1,235 @@
1
+ {
2
+ "order": {
3
+ "integratedDeliveryCompany": "已对接配送平台",
4
+ "delivery": "配送",
5
+ "pickup": "自取",
6
+ "dineIn": "堂食",
7
+ "serviceCharge": "服务费",
8
+ "sms": "短信",
9
+ "deliveryDescription": "我们将以下配送服务与您的POS系统进行结合,让您能够更加快速且安全地将餐点送到客户手中。",
10
+ "search": "搜索",
11
+ "searchRestaurant": "搜索餐厅",
12
+ "noRestaurantSelected": "未选择餐厅",
13
+ "company": "平台",
14
+ "catalog": "目录",
15
+ "paymentType": "交易类型",
16
+ "status": "状态",
17
+ "manual": "手动",
18
+ "auto": "自动",
19
+ "active": "激活",
20
+ "inactive": "未激活",
21
+ "deliveryTitle": "{company} 配送",
22
+ "inHouseDelivery": "In house 配送",
23
+ "feedMeExpress": "FeedMe 外卖快递",
24
+ "localDeliveryCompany": "本地配送平台",
25
+ "localDeliveryDescription": "激活配送平台以在POS系统中创建新的订单。",
26
+ "activateDeliveryCompany": "激活{company}配送",
27
+ "inhouseSwitchSublabel": "通过POS系统接受In house配送",
28
+ "generalSetting": "通用设置",
29
+ "ignoreStock": "忽略库存",
30
+ "ignoreStockSublabel": "客户依然可以下单,即使商品缺货",
31
+ "deliveryTerm": "配送条款",
32
+ "taxSetting": "税务设置",
33
+ "taxSettingTerm": "(税务设置仅适用于{validatePosVersion}版本后的POS系统)",
34
+ "manageDelivery": "管理 {company} 配送",
35
+ "feedmeExpressTitle": "更新 Feedme 外卖快递",
36
+ "inhouseDeliveryTitle": "管理 in house 配送",
37
+ "inhouseDeliveryTaxLabel": "配送费附加税",
38
+ "inhouseDeliveryTaxSublabel": "通过POS系统接受In house配送",
39
+ "inhouseDeliveryInputLabel": "(仅在餐厅档案已设置SST时方可适用)",
40
+ "inhouseDeliveryTaxCalculation": "税务计算",
41
+ "taxInclusive": "含税",
42
+ "taxExclusive": "不含税",
43
+ "acceptedPayment": "可接受付款方式",
44
+ "offlinePayment": "线下支付",
45
+ "ePayment": "电子支付",
46
+ "cash": "现金",
47
+ "all": "所有",
48
+ "customOfflinePayment": "自定义线下付款方式",
49
+ "customOfflinePaymentHeader": "自定义线下付款方式",
50
+ "addOfflinePayment": "添加线下付款方式",
51
+ "addCustomPayment": "添加自定义付款方式",
52
+ "editOfflinePayment": "编辑线下支付方式",
53
+ "enterPaymentName": "输入付款名称",
54
+ "enterPaymentInstruction": "输入付款说明",
55
+ "general": "通用",
56
+ "instruction": "付款说明",
57
+ "offlinePaymentName": "付款名称",
58
+ "fieldCannotBeEmpty": "字段不可为空",
59
+ "orderType": "订单类型",
60
+ "orderFrom": "预订从",
61
+ "daysTo": "天到",
62
+ "days": "天",
63
+ "preOrderHint": "于今日 {today} 下单,客户可以在 {start} 和 {end} 之间预订。最多 7 天。",
64
+ "asap": "尽快配送",
65
+ "preOrder": "预订",
66
+ "deliveryTime": "配送时间",
67
+ "deliveryOrder": "配送订单",
68
+ "operatingHour": "营业时间",
69
+ "fixedTime": "固定时间",
70
+ "customTime": "自定义时间",
71
+ "timeSlot": "时间段",
72
+ "addTimeSlot": "添加时间段",
73
+ "monday": "星期一",
74
+ "tuesday": "星期二",
75
+ "wednesday": "星期三",
76
+ "thursday": "星期四",
77
+ "friday": "星期五",
78
+ "saturday": "星期六",
79
+ "sunday": "星期日",
80
+ "addDeliveryZone": "添加配送区域",
81
+ "save": "保存",
82
+ "cancel": "取消",
83
+ "deliveryFee": "配送费",
84
+ "minPurchase": "最低购买金额",
85
+ "minSpendForFreeDelivery": "免费配送的最低消费金额",
86
+ "deliveryZone": "配送区域",
87
+ "actiavteFeedmeExpress": "激活FeedMe外卖配送",
88
+ "activateFeedmeExpressSublabel": "客户可以选择FeedMe外卖快递来配送他们的餐点",
89
+ "generalInfo": "通用信息",
90
+ "term": "条款",
91
+ "deliveryInstruction": "配送说明",
92
+ "activateIntegration": "激活{integrationType}对接",
93
+ "integrationDescription": "POS系统可以添加与{name}公司合作的配送订单",
94
+ "default": "默认",
95
+ "orderSetting": "订单设置",
96
+ "billRounding": "账单四舍五入",
97
+ "remoteId": "平台注册ID",
98
+ "allowedAutoCloseBill": "允许自动结算账单",
99
+ "allowedAutoAcceptOrder": "允许自动接受订单",
100
+ "ignoreDiscount": "不适用折扣",
101
+ "sstInclusive": "包含SST",
102
+ "commission": "佣金",
103
+ "syncMenu": "同步菜单",
104
+ "selectItem": "请选择",
105
+ "processing": "处理中",
106
+ "success": "成功",
107
+ "failed": "失败",
108
+ "updatedAt": "更新于",
109
+ "lastSync": "上次同步",
110
+ "createTestOrder": "创建测试订单",
111
+ "create": "创建",
112
+ "updateDeliveryCompany": "更新配送公司",
113
+ "updatePickupSetting": "更新自取设置",
114
+ "restaurant": "餐厅",
115
+ "paymentMethod": "付款方式",
116
+ "online": "在线",
117
+ "pickupPoint": "自取地点",
118
+ "activated": "已激活",
119
+ "deactivated": "已停用",
120
+ "day": "天",
121
+ "to": "至",
122
+ "multiplePickupPoint": "多个取货地点",
123
+ "allowMultiplePickupSublabel": "允许客户在不同的取货地点自取,不限于餐厅",
124
+ "restaurantAsPickupPoint": "餐厅为取货地点",
125
+ "addPickupPoint": "添加取货地点",
126
+ "editPickupPoint": "编辑取货地点",
127
+ "name": "名称",
128
+ "address": "地址",
129
+ "enterName": "输入名称",
130
+ "enterAddress": "输入地址",
131
+ "add": "添加",
132
+ "apply": "应用",
133
+ "anonymousOrder": "匿名订单",
134
+ "anonymousOrderSublabel": "客户无需登录即可下单",
135
+ "staticQRcode": "静态二维码",
136
+ "staticQRcodeSublabel": "客户可以通过静态二维码下单",
137
+ "customerItemRemark": "客户商品备注",
138
+ "customerItemRemarkSublabel": "客户可以为商品添加备注",
139
+ "acceptQueue": "接受队列",
140
+ "acceptQueueSublabel": "客户可以在FeedMe应用中使用排队功能",
141
+ "saveSetting": "保存设置",
142
+ "enableServiceCharge": "启用服务费",
143
+ "serviceChargeSublabel": "根据不同的情况,如餐厅,就餐选项,商品,时间段等,自定义规则。",
144
+ "serviceChargeRule": "* 服务费功能仅适用于POS版本4.0.0或更高版本。",
145
+ "chargeWhen": "满足条件时收费",
146
+ "beforeBillDiscount": "账单折扣前",
147
+ "afterBillDiscount": "账单折扣后",
148
+ "rate": "费率",
149
+ "selectServiceChargeType": "选择服务费类型",
150
+ "inclusive": "包括",
151
+ "exclusive": "不包括",
152
+ "customServiceCharge": "自定义服务收费",
153
+ "delete": "删除",
154
+ "loadingMenu": "加载菜单",
155
+ "noAvailableItem": "无可用商品",
156
+ "table": "餐桌",
157
+ "item": "商品",
158
+ "loadingTable": "加载餐桌",
159
+ "noAvailableTable": "无可用餐桌",
160
+ "productSelected": "已选择商品",
161
+ "confirm": "确认",
162
+ "selectTable": "选择餐桌",
163
+ "tableSelected": "已选择餐桌",
164
+ "applyFor": "应用于",
165
+ "takeaway": "外带",
166
+ "deliveryCompany": "配送公司",
167
+ "addServiceCharge": "添加服务费",
168
+ "credit": "可用余额",
169
+ "balance": "余额",
170
+ "pricePerMessage": "每条短信的价格",
171
+ "setting": "设置",
172
+ "serve": "服务",
173
+ "accept": "接受",
174
+ "edit": "编辑",
175
+ "feedmeExpressPosVersionIssue": "需要最低{minVersion}版本的POS系统才能使用FeedMe外卖快递",
176
+ "feedmeExpressPayoutAccIssue": "需要设置支付账户才能启用FeedMe外卖快递",
177
+ "feedmeExpressNotApproved": "您的支付账户正在审核中,请联系我们的工作人员获取进一步的帮助。",
178
+ "invalidRestaurant": "无效的餐厅",
179
+ "contact": "联络",
180
+ "pleaseCompleteProfile": "请完善您的餐厅资料以启用FeedMe外卖快递",
181
+ "discountCampaign": "促销活动",
182
+ "addNewCampaign": "添加新的促销活动",
183
+ "addCampaign": "添加促销活动",
184
+ "vendorBearPercentage": "供应商承担百分比",
185
+ "enterANumber": "输入一个号码",
186
+ "kiosk": "自助点餐设备",
187
+ "deviceBinding": "设备绑定",
188
+ "bindDevice": "绑定设备",
189
+ "settings": "设置",
190
+ "activateLocation": "启用定位",
191
+ "selectRestaurant": "选择餐厅",
192
+ "kioskDisplay": "自助点餐设备显示",
193
+ "kioskDisplayDescription": "点击“绑定设备”以获取绑定设备的专用代码",
194
+ "activatedDate": "激活日期",
195
+ "deviceDetails": "设备详情",
196
+ "unbind": "解除绑定",
197
+ "unbindKioskDevice": "解除自助点餐设备绑定",
198
+ "unbindKioskDeviceWarning": "你确定要解除绑定设备吗?如果是,请在文本框中输入{machineId}",
199
+ "unbindSuccess": "自助点餐设备成功解除绑定",
200
+ "unbindWarning": "请输入设备ID以确认解除绑定",
201
+ "bindDeviceMessage": "请输入此代码到您的自助点餐设备以进行绑定",
202
+ "kioskSummary": "自助点餐设备概览",
203
+ "dineInType": "堂食类型",
204
+ "tableService": "餐桌服务",
205
+ "pickAtCounter": "在柜台取餐",
206
+ "unknown": "未知",
207
+ "kioskSettingSuccess": "自助点餐设备订单设置更新成功",
208
+ "kioskSettingFailed": "自助点餐设备订单设置更新失败",
209
+ "displayStand": "桌牌",
210
+ "tableServiceSetting": "餐桌服务设置",
211
+ "prefix": "前缀",
212
+ "start": "开始",
213
+ "end": "结束",
214
+ "nonNegativeRule": "该值必须为正数",
215
+ "greaterThanMinRule": "最大值应大于等于最小值",
216
+ "padDigit": "位数",
217
+ "takeawayTitle": "外带",
218
+ "updateSetting": "更新设置",
219
+ "pleaseSelectRestaurant": "请选择一个餐厅",
220
+ "failedToUpdateSetting": "设置更新失败",
221
+ "updatePayoutAccount": "更新支付账户",
222
+ "updateNow": "立即更新",
223
+ "autoIntegration": "自动对接",
224
+ "autoIntegrationWarning": "自动配送对接不可用, 请联络我们的工作人员了解更多信息。 原因: {reason}",
225
+ "restaurantHaveNotPurchase": "餐厅尚未购买{featureKey}功能",
226
+ "invalidPosVersion": "POS版本不适用",
227
+ "notAllowed": "没有权限",
228
+ "autoSendKitchen": "自动发送至厨房",
229
+ "promptAnonymousLoginDialog": "为匿名用户弹出登入对话框",
230
+ "autoSendKitchenSublabel": "需要POS版本7或以上",
231
+ "payoutAccountIsRequired": "需要支付账户",
232
+ "c": "支付账户正在审查中",
233
+ "payoutPosVersion": "需要POS{version}或以上 "
234
+ }
235
+ }
package/src/main.ts CHANGED
@@ -10,14 +10,36 @@ import { AuthApi } from './api/auth'
10
10
  import { getAuth, signInWithCustomToken } from 'firebase/auth'
11
11
  import { initializeApp } from 'firebase/app'
12
12
  import { useIframeStore } from './stores/iframe'
13
+ import { createFeedMeI18n, type I18n, detectLocale } from "@feedmepos/mf-common"
14
+ import enUS from "./locales/en-US.json"
15
+ import zhCN from "./locales/zh-CN.json"
16
+
17
+ export const i18nMessages = {
18
+ "en-US": enUS,
19
+ "zh-CN": zhCN
20
+ }
21
+
22
+ function initI18n(): I18n {
23
+ const i18n = createFeedMeI18n({
24
+ locale: detectLocale(),
25
+ messages: i18nMessages,
26
+ })
27
+ return i18n
28
+ }
29
+
13
30
 
14
31
  const app = createApp(Entry)
15
32
 
33
+ app.use(initI18n())
16
34
  app.use(createPinia())
17
35
  app.use(router)
18
36
 
19
37
 
20
- app.use(FeedMeUI);
38
+
39
+ app.use(FeedMeUI, {
40
+ locale: detectLocale(),
41
+ })
42
+
21
43
  const CoreStore = useCoreStore();
22
44
  const iframeMode = computed(() => {
23
45
  return new URLSearchParams(window.location.search).get('iframe') === 'true';
@@ -1,6 +1,8 @@
1
1
  import { defineStore } from 'pinia'
2
2
  import { restaurantApi, type RestaurantSettingDoc } from '@/api/restaurant-setting'
3
3
  import {
4
+ F_FEATURE,
5
+ F_PAYOUT_ACCOUNT_STATUS,
4
6
  FdoFoodpandaSettings,
5
7
  FdoRestaurantDineIn,
6
8
  FdoRestaurantFeedmeDelivery,
@@ -13,9 +15,11 @@ import {
13
15
  type FdoRestaurant
14
16
  } from '@feedmepos/core/entity'
15
17
  import { FdoGrabfoodSettings } from '@entity'
16
- import { FeatureFlag } from '@feedmepos/core'
18
+ import { FeatureFlag, Pos } from '@feedmepos/core'
17
19
  import { SvcConfig } from '@/api'
18
20
  import { remoteOrderApi } from '@/api/remoteOrder'
21
+ import { useI18n } from '@feedmepos/mf-common'
22
+
19
23
 
20
24
  export interface Profile extends FdoProfile {
21
25
  address: Address
@@ -62,8 +66,9 @@ export const useRestaurantStore = defineStore('restaurant', {
62
66
  return initRestaurantState()
63
67
  },
64
68
  getters: {
65
- currentRestaurant: (state) => state.businessRestaurants.find((r) => r.id === state.currentRestaurantId),
66
- currentRestaurantSetting: (state) => state.restaurantSettings[state.currentRestaurantId || ''],
69
+ currentRestaurant: (state) =>
70
+ state.businessRestaurants.find((r) => r.id === state.currentRestaurantId),
71
+ currentRestaurantSetting: (state) => state.restaurantSettings[state.currentRestaurantId || '']
67
72
  },
68
73
  actions: {
69
74
  async readRestaurantSetting(restaurantId: string) {
@@ -106,6 +111,29 @@ export const useRestaurantStore = defineStore('restaurant', {
106
111
  },
107
112
  async updateIntegratedShopeefoodDelivery(restaurantId: string, dto: FdoShopeeFoodSettings) {
108
113
  await remoteOrderApi.integratedDelivery.updateShopeefood(restaurantId, dto)
114
+ },
115
+ getRestaurantEPayment(dto?: FdoRestaurant | undefined): true | string {
116
+ const { t } = useI18n()
117
+ if (!dto) {
118
+ return 'getRestaurantEPayment - Invalid restaurant ';
119
+ }
120
+ const { payoutAccount, posVersion } = dto;
121
+ const validPosVersion =
122
+ !!posVersion &&
123
+ Pos.canUse({
124
+ feature: F_FEATURE.enum.qrEPayment,
125
+ posVersion
126
+ })
127
+
128
+ if (!validPosVersion)
129
+ return t('order.payoutPosVersion', {version: Pos.minVersionToUse(F_FEATURE.enum.qrEPayment)})
130
+ if (!payoutAccount || !payoutAccount.enable) {
131
+ return t('order.payoutAccountIsRequired')
132
+ }
133
+ if (payoutAccount.status !== F_PAYOUT_ACCOUNT_STATUS.enum.APPROVED) {
134
+ return t('order.payoutAccountIsRequired')
135
+ }
136
+ return true
109
137
  }
110
138
  }
111
139
  })
@@ -72,11 +72,6 @@ export const useTableSettingStore = defineStore('tableSetting', {
72
72
  }
73
73
  else if (settings.enableV3) {
74
74
  this.tables = [
75
- {
76
- _id: '',
77
- name: '#Takeaway',
78
- qrLink: `${appEndpoint.customerV3App}/dine?seat=_TA_&id=${settings._id}`,
79
- },
80
75
  ...resp,
81
76
  ];
82
77
  }
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <div class="p-[1.5rem] border fm-corner-radius-lg flex flex-col gap-5">
3
- <span class="fm-typo-en-title-sm-600">Kiosk Summary</span>
3
+ <span class="fm-typo-en-title-sm-600">{{ t('order.kioskSummary') }}</span>
4
4
  <hr class="my-[0.25rem]" />
5
5
  <div class="flex flex-col gap-1">
6
6
  <div class="flex flex-col gap-1">
7
- <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Kiosk Display</span>
7
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ t('order.kioskDisplay') }}</span>
8
8
 
9
9
  <div class="fm-typo-en-body-lg-600">
10
10
  <div v-if="devices.length > 0">
@@ -13,22 +13,22 @@
13
13
  <div v-else>-</div>
14
14
  </div>
15
15
 
16
- <div v-if="dineInStatus === 'Activated'">
17
- <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Dine In</span>
16
+ <div v-if="dineInStatus === t('order.activated')">
17
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ t('order.dineIn') }}</span>
18
18
  <div class="fm-typo-en-body-lg-600 block">
19
19
  <div>{{ dineInStatus }}</div>
20
20
  </div>
21
21
  </div>
22
22
 
23
- <div v-if="dineInStatus === 'Activated' && dineInType !== 'Unknown'">
24
- <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Dine In Type</span>
23
+ <div v-if="dineInStatus === t('order.activated') && dineInType !== t('order.unknown')">
24
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ t('order.dineInType') }}</span>
25
25
  <div class="fm-typo-en-body-lg-600 block">
26
26
  <div>{{ dineInType }}</div>
27
27
  </div>
28
28
  </div>
29
29
 
30
- <div v-if="takeAwayStatus === 'Activated'">
31
- <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">Take Away</span>
30
+ <div v-if="takeAwayStatus === t('order.activated')">
31
+ <span class="fm-typo-en-body-lg-400 text-fm-color-typo-secondary">{{ t('order.takeaway') }}</span>
32
32
  <div class="fm-typo-en-body-lg-600 block">
33
33
  <div>{{ takeAwayStatus }}</div>
34
34
  </div>
@@ -44,6 +44,9 @@
44
44
  import type { MfKioskDevice } from '@/modules/kiosk/interface';
45
45
  import type { MfKioskOrderSetting } from '@/modules/order-setting/kiosk/interface';
46
46
  import { computed } from 'vue'
47
+ import { useI18n } from '@feedmepos/mf-common'
48
+
49
+ const { t } = useI18n()
47
50
 
48
51
  interface Props {
49
52
  restaurantId: string,
@@ -54,20 +57,20 @@ interface Props {
54
57
  const props = defineProps<Props>();
55
58
 
56
59
  const dineInStatus = computed<string>(() => {
57
- return props.kioskOrderSetting?.dineIn.enabled ? 'Activated' : 'Deactivated';
60
+ return props.kioskOrderSetting?.dineIn.enabled ? t('order.activated') : t('order.deactivated');
58
61
  });
59
62
 
60
63
  const takeAwayStatus = computed<string>(() => {
61
- return props.kioskOrderSetting?.takeaway.enabled ? 'Activated' : 'Deactivated';
64
+ return props.kioskOrderSetting?.takeaway.enabled ? t('order.activated') : t('order.deactivated');
62
65
  });
63
66
 
64
67
  const dineInType = computed<string>(() => {
65
68
  if (props.kioskOrderSetting?.dineIn.displayStand) {
66
- return 'Table Service'
69
+ return t('order.tableService')
67
70
  } else if (props.kioskOrderSetting?.dineIn && !props.kioskOrderSetting.dineIn.displayStand) {
68
- return 'Pick at counter'
71
+ return t('order.pickAtCounter')
69
72
  } else {
70
- return 'Unknown'
73
+ return t('order.unknown')
71
74
  }
72
75
  });
73
76
 
@@ -1,15 +1,15 @@
1
1
  <template>
2
2
  <div class="py-[1.5rem]">
3
- <FmPageHead title="Kiosk" />
3
+ <FmPageHead :title="t('order.kiosk')" />
4
4
  <div class="flex px-[1.5rem]">
5
5
  <div class="flex-[2_2_0%]">
6
6
  <FmTabs v-model:model-value="selectedMenuItem" :items="menuItems"></FmTabs>
7
7
  <div class="pt-[1.5rem]">
8
8
  <div class="flex flex-col gap-10">
9
9
  <div class="flex flex-col gap-2">
10
- <span class="fm-typo-en-title-sm-600"> Activate location </span>
11
- <span class="fm-typo-en-title-sm-400"> Select Restaurant: </span>
12
- <FmSelect class="w-1/2" v-model="currentSelect" :items="restaurantItems"
10
+ <span class="fm-typo-en-title-sm-600"> {{ t('order.activateLocation') }} </span>
11
+ <span class="fm-typo-en-title-sm-400"> {{ t('order.selectRestaurant') }}: </span>
12
+ <FmSelect class="w-1/2" v-model="currentSelect" :items="restaurantItems" :placeholder="t('order.selectItem')"
13
13
  @update:model-value="selectRestaurant" />
14
14
  </div>
15
15
  <KioskDevicesView v-if="selectedMenuItem == 'device'" :devices="devices"
@@ -36,10 +36,13 @@ import { ref, computed, defineAsyncComponent, watch } from 'vue';
36
36
  import { useKioskStore } from '@/stores/kiosk';
37
37
  import type { MfKioskDevice } from "@/modules/kiosk/interface";
38
38
  import KioskOtpDialog from "@/views/kiosk/devices/KioskOtpDialog.vue";
39
- import { useCoreStore } from "@feedmepos/mf-common";
39
+ import { useCoreStore, useI18n } from "@feedmepos/mf-common";
40
40
  import { useOrderSettings } from '@/stores/order-setting';
41
41
  import type { MfKioskOrderSetting } from '@/modules/order-setting/kiosk/interface';
42
42
  import { defaultKioskOrderSetting } from '@/stores/order-setting/mapper';
43
+ import { capitalCase } from 'change-case';
44
+
45
+ const { t } = useI18n();
43
46
 
44
47
  type KioskMenuItemValue = "device" | "setting";
45
48
 
@@ -75,11 +78,11 @@ async function selectRestaurant(v: string) {
75
78
 
76
79
  const menuItems = computed<FmTabProps[]>(() => [
77
80
  {
78
- label: 'Device Binding',
81
+ label: t('order.deviceBinding'),
79
82
  value: 'device',
80
83
  },
81
84
  {
82
- label: 'Settings',
85
+ label: t('order.settings'),
83
86
  value: 'setting',
84
87
  }
85
88
  ]);
@@ -91,7 +94,7 @@ const devices = computed<MfKioskDevice[]>(() => {
91
94
  async function requestOtp() {
92
95
  await KioskStore.requestOtp();
93
96
  Dialog.open({
94
- title: "Bind Device",
97
+ title: capitalCase(t('order.bindDevice')),
95
98
  contentComponent: KioskOtpDialog,
96
99
  contentComponentProps: {
97
100
  otp: KioskStore.state.otp,
@@ -104,12 +107,12 @@ async function updateKioskOrderSetting(form: MfKioskOrderSetting) {
104
107
  OrderSettingStore.setKioskOrderSetting(form);
105
108
  await OrderSettingStore.updateKioskSetting();
106
109
  SnackBar.open({
107
- title: 'Kiosk order setting updated',
110
+ title: t('order.kioskSettingSuccess'),
108
111
  type: 'success',
109
112
  });
110
113
  } catch (e) {
111
114
  SnackBar.open({
112
- title: 'Failed to update kiosk order setting',
115
+ title: t('order.kioskSettingFailed'),
113
116
  type: 'error',
114
117
  });
115
118
  }
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
 
3
3
  <div class="border fm-corner-radius-lg flex justify-between pr-[1rem] w-11/12">
4
- <FmSideSheet header="Device Details" dismiss-away class="w-full" :maxWidth="700">
4
+ <FmSideSheet :header="t('order.deviceDetails')" dismiss-away class="w-full" :maxWidth="700">
5
5
  <template #side-sheet-button>
6
6
  <FmListItem class="flex-1" :label="device.name"
7
- :sublabel="`Activated date: ${dayjs(device.activatedAt).format('DD MMM YYYY HH:mm')}`">
7
+ :sublabel="`${t('order.activatedDate')}: ${dayjs(device.activatedAt).format('DD MMM YYYY HH:mm')}`">
8
8
  </FmListItem>
9
9
  </template>
10
10
  <div class="py-[1rem] flex flex-col gap-6">
@@ -32,6 +32,9 @@ import KioskUnbindConfirm from './KioskUnbindConfirm.vue';
32
32
  import { computed, ref } from 'vue';
33
33
  import { useKioskStore } from '@/stores/kiosk';
34
34
  import dayjs from 'dayjs';
35
+ import { useI18n } from '@feedmepos/mf-common'
36
+
37
+ const { t } = useI18n()
35
38
 
36
39
  const Dialog = useDialog();
37
40
  const Snackbar = useSnackbar();
@@ -60,7 +63,7 @@ const configs = computed(() => {
60
63
  function openUnbindDialog() {
61
64
  unBindTextFieldValue.value = '';
62
65
  Dialog.open({
63
- title: "Unbind Kiosk Device",
66
+ title: t('order.unbindKioskDevice'),
64
67
  contentComponent: KioskUnbindConfirm,
65
68
  contentComponentProps: {
66
69
  machineId: props.device.machineId,
@@ -70,12 +73,12 @@ function openUnbindDialog() {
70
73
  },
71
74
  dismissAway: false,
72
75
  primaryActions: {
73
- text: 'Unbind',
76
+ text: t('order.unbind'),
74
77
  variant: 'destructive',
75
78
  close: false,
76
79
  },
77
80
  secondaryActions: {
78
- text: 'Cancel',
81
+ text: t('order.cancel'),
79
82
  variant: 'tertiary',
80
83
  close: true,
81
84
  }
@@ -84,14 +87,14 @@ function openUnbindDialog() {
84
87
  await unbind();
85
88
  Snackbar.open({
86
89
  type: 'success',
87
- message: 'Kiosk display successfully unbinded.',
90
+ message: t('order.unbindSuccess'),
88
91
  position: 'bottom' as SnackbarPosition,
89
92
  });
90
93
  Dialog.close();
91
94
  } else {
92
95
  Snackbar.open({
93
96
  type: 'warning',
94
- message: 'Please enter the machine ID to confirm unbind.',
97
+ message: t('order.unbindWarning'),
95
98
  position: 'bottom' as SnackbarPosition,
96
99
 
97
100
  });
@@ -2,14 +2,13 @@
2
2
  <div>
3
3
  <div class="flex flex-col gap-2">
4
4
  <div class="flex flex-col gap-2">
5
- <span class="fm-typo-en-title-sm-600 block"> Kiosk Display </span>
6
- <span class="fm-typo-en-body-md-400 block">Click "Bind device" to receive a special code for device
7
- binding.</span>
5
+ <span class="fm-typo-en-title-sm-600 block"> {{ t('order.kioskDisplay') }} </span>
6
+ <span class="fm-typo-en-body-md-400 block"> {{ t('order.kioskDisplayDescription') }} </span>
8
7
  </div>
9
8
  <div class="flex flex-col gap-6">
10
9
  <KioskDeviceCard v-for="device in devices" :key="device.machineId" :device="device"></KioskDeviceCard>
11
10
  <FmButton variant="plain" class="w-[10rem] border border-fm-color-primary fm-corner-radius-lg"
12
- label="Bind device" size="md" prepend-icon="link" @click="requestOtp" />
11
+ :label="t('order.bindDevice')" size="md" prepend-icon="link" @click="requestOtp" />
13
12
  </div>
14
13
  </div>
15
14
  </div>
@@ -17,6 +16,9 @@
17
16
  <script setup lang="ts">
18
17
  import KioskDeviceCard from "./KioskDeviceCard.vue";
19
18
  import type { MfKioskDevice } from "@/modules/kiosk/interface";
19
+ import { useI18n } from '@feedmepos/mf-common'
20
+
21
+ const { t } = useI18n();
20
22
 
21
23
  interface Props {
22
24
  devices: MfKioskDevice[],
@@ -1,11 +1,14 @@
1
1
  <template>
2
2
  <div class="flex flex-col gap-5 pb-6">
3
3
  <!--Show otp here-->
4
- <span class="fm-typo-en-body-md-400 block">Enter this code to your kiosk device to bind.</span>
4
+ <span class="fm-typo-en-body-md-400 block">{{ t('order.bindDeviceMessage') }}</span>
5
5
  <div class="fm-typo-en-title-md-600">{{ otp }}</div>
6
6
  </div>
7
7
  </template>
8
8
  <script setup lang="ts">
9
+ import { useI18n } from '@feedmepos/mf-common'
10
+
11
+ const { t } = useI18n()
9
12
 
10
13
  interface Props {
11
14
  otp: string
@@ -1,12 +1,14 @@
1
1
  <template>
2
2
  <div>
3
- <span>Are you sure want to unbind device? If yes, please enter {{ machineId }} inside the textfield</span>
3
+ <span>{{ t('order.unbindKioskDeviceWarning', {machineId}) }}</span>
4
4
  <FmTextField :model-value="modelValue" @update:model-value="updateModelValue" :placeholder="machineId"></FmTextField>
5
5
  </div>
6
6
  </template>
7
7
  <script setup lang="ts">
8
8
  import { ref } from 'vue';
9
+ import { useI18n } from '@feedmepos/mf-common'
9
10
 
11
+ const { t } = useI18n()
10
12
 
11
13
  interface Props{
12
14
  machineId: string,
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="flex flex-col gap-5">
3
3
  <div class="flex flex-col gap-16">
4
- <FmSwitch v-model="form.enabled" label="Dine In" label-placement="right" />
4
+ <FmSwitch v-model="form.enabled" :label="t('order.dineIn')" label-placement="right" />
5
5
  <div v-show="form.enabled" class="flex flex-col gap-16">
6
6
  <KioskPickAtCounterSection v-if="form.pickUp" :enabled="form.pickUp.enabled"
7
7
  @update-pick-up="updatePickUp" />
@@ -17,6 +17,9 @@ import KioskDisplayStandSection from './KioskDisplayStandSection.vue';
17
17
  import KioskPickAtCounterSection from './KioskPickAtCounterSection.vue';
18
18
  import { ref, watch } from 'vue';
19
19
  import { ObjectUtil } from '@/utils/object';
20
+ import { useI18n } from '@feedmepos/mf-common'
21
+
22
+ const { t } = useI18n()
20
23
 
21
24
  interface Props {
22
25
  getSetting: () => KioskDineInSettingForm,