@feedmepos/mf-order-setting 0.0.27 → 0.0.28

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 (70) hide show
  1. package/dist/{KioskDevicesView-AKvyDF3w.js → KioskDevicesView-BgXkmJ7v.js} +1 -1
  2. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-Cx8VMyNB.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DZT0BuUN.js} +2 -2
  3. package/dist/{KioskSettingView-equ5EIvU.js → KioskSettingView-DyX3Wv_2.js} +1 -1
  4. package/dist/{KioskView-CsE7BGtA.js → KioskView-Bgff7QPc.js} +4 -4
  5. package/dist/OrderSettingsView-C63s4uCD.js +74334 -0
  6. package/dist/{app-D-zQN9_E.js → app-Dp79Gu_F.js} +97 -25
  7. package/dist/app.js +1 -1
  8. package/dist/{dayjs.min-CWQSmujV.js → dayjs.min-B2ZkfNUH.js} +278 -267
  9. package/dist/frontend/mf-order/src/api/business/index.d.ts +5 -0
  10. package/dist/frontend/mf-order/src/api/effects/index.d.ts +3 -0
  11. package/dist/frontend/mf-order/src/api/index.d.ts +2 -0
  12. package/dist/frontend/mf-order/src/app.d.ts +72 -0
  13. package/dist/frontend/mf-order/src/main.d.ts +72 -0
  14. package/dist/frontend/mf-order/src/stores/business/index.d.ts +62 -0
  15. package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +138 -125
  16. package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +81 -78
  17. package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +54 -52
  18. package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +4 -0
  19. package/dist/frontend/mf-order/src/views/order-settings/discount-rule/DiscountRuleSetting.vue.d.ts +2 -0
  20. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  21. package/dist/{index-BwrMcIf2.js → index-DzQn92Tp.js} +2 -2
  22. package/dist/package/entity/booking/booking.do.d.ts +596 -551
  23. package/dist/package/entity/delivery/delivery.dto.d.ts +118 -109
  24. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +342 -652
  25. package/dist/package/entity/incoming-order/incoming-order.do.d.ts +13778 -478
  26. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +728 -1227
  27. package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +1 -1
  28. package/dist/package/entity/index.d.ts +1 -0
  29. package/dist/package/entity/kiosk/kiosk.do.d.ts +32 -0
  30. package/dist/package/entity/kiosk/kiosk.dto.d.ts +14 -14
  31. package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1469 -621
  32. package/dist/package/entity/member/member.dto.d.ts +14 -7
  33. package/dist/package/entity/order/effects/effect.dto.d.ts +154 -6
  34. package/dist/package/entity/order/order-item/order-item.dto.d.ts +87 -34
  35. package/dist/package/entity/order/order.do.d.ts +177 -572
  36. package/dist/package/entity/order/order.dto.d.ts +902 -1412
  37. package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +8 -0
  38. package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +8 -0
  39. package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +22 -3
  40. package/dist/package/entity/order-platform/external/order/external-order.enum.d.ts +1 -1
  41. package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +5 -0
  42. package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +5 -0
  43. package/dist/package/entity/order-platform/external/zus/zus-menu.dto.d.ts +192 -0
  44. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +104 -0
  45. package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +152 -109
  46. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +3 -0
  47. package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +3 -0
  48. package/dist/package/entity/order-platform/foodpanda/foodpanda.enum.d.ts +2 -0
  49. package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +139 -109
  50. package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +3 -0
  51. package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +112 -2
  52. package/dist/package/entity/order-platform/order-platform.dto.d.ts +6 -3
  53. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +164 -109
  54. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +22 -0
  55. package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.do.d.ts +3 -0
  56. package/dist/package/entity/order-platform/shopeefood/shopeefood-settings.dto.d.ts +3 -0
  57. package/dist/queue.do-BUtcyDk3.js +125578 -0
  58. package/package.json +4 -3
  59. package/src/api/business/index.ts +16 -0
  60. package/src/api/effects/index.ts +7 -0
  61. package/src/api/index.ts +9 -1
  62. package/src/locales/en-US.json +24 -1
  63. package/src/locales/th-TH.json +24 -1
  64. package/src/locales/zh-CN.json +27 -1
  65. package/src/stores/business/index.ts +45 -0
  66. package/src/stores/restaurant/index.ts +3 -1
  67. package/src/views/order-settings/OrderSettingsView.vue +17 -5
  68. package/src/views/order-settings/discount-rule/DiscountRuleSetting.vue +434 -0
  69. package/dist/OrderSettingsView-BpLXyk_0.js +0 -49013
  70. package/dist/queue.do-F110q0_J.js +0 -100389
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feedmepos/mf-order-setting",
3
- "version": "0.0.27",
3
+ "version": "0.0.28",
4
4
  "type": "module",
5
5
  "module": "./dist/app.js",
6
6
  "license": "UNLICENSED",
@@ -21,12 +21,13 @@
21
21
  "build:dev": "cross-env NODE_ENV=dev vite build --mode dev",
22
22
  "build:prod": "vite build --mode prod",
23
23
  "type-check": "set NODE_OPTIONS=--max-old-space-size=16384 && vue-tsc --noEmit -p tsconfig.app.json --composite false",
24
+ "type-check:mac": "export NODE_OPTIONS=--max-old-space-size=16384 && vue-tsc --noEmit -p tsconfig.app.json --composite false",
24
25
  "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
25
26
  "format": "prettier --write src/"
26
27
  },
27
28
  "dependencies": {
28
- "@feedmepos/core": "^2.14.10",
29
- "@feedmepos/menu": "^1.5.14",
29
+ "@feedmepos/core": "^2.14.19",
30
+ "@feedmepos/menu": "^1.5.18",
30
31
  "@feedmepos/mf-common": "1.20.0-beta.2",
31
32
  "@feedmepos/ordering": "^0.0.3",
32
33
  "@feedmepos/ui-library": "1.5.2-beta.1",
@@ -0,0 +1,16 @@
1
+ import { getData, businessClientInstance } from '@/api'
2
+ import { FdtoDiscountRuleRes, FdoDiscountRule } from '@feedmepos/core/entity'
3
+
4
+ export const businessApi = {
5
+ async readDiscountRule(businessId: string): Promise<FdtoDiscountRuleRes> {
6
+ const result = await businessClientInstance(businessId).get('/discount-rule')
7
+ return getData(result)
8
+ },
9
+ async updateDiscountRule(
10
+ businessId: string,
11
+ discountRule: FdoDiscountRule
12
+ ): Promise<FdtoDiscountRuleRes> {
13
+ const result = await businessClientInstance(businessId).put('/discount-rule', discountRule)
14
+ return getData(result)
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ import { getData, marketingBackendClientInstance } from '..';
2
+
3
+ export const effectApi = {
4
+ async getEffects(businessId:string): Promise<any> {
5
+ return getData(await marketingBackendClientInstance().get(`/businesses/${businessId}/effects`)).data;
6
+ }
7
+ };
package/src/api/index.ts CHANGED
@@ -12,6 +12,7 @@ interface ApiUrl {
12
12
  menuBackendUrl: string
13
13
  smsBackendUrl: string
14
14
  accountBackendUrl: string
15
+ marketingBackendUrl: string
15
16
  }
16
17
 
17
18
  let apiUrl: ApiUrl | null = null
@@ -57,13 +58,15 @@ function generateBackendUrl(country: F_COUNTRY): ApiUrl {
57
58
  const domain = `${isDev ? '-dev' : ''}${area}.feedmeapi.com`
58
59
  const portalBackendUrl = `https://portal-v2${domain}`
59
60
  const accountBackendUrl = `https://account${domain}`
61
+ const marketingBackendUrl = `https://portal-marketing${domain}`
60
62
  return {
61
63
  portalBackendUrl,
62
64
  websocketBackendUrl: `wss://94ilf9iqc0.execute-api.ap-southeast-1.amazonaws.com/${isDev ? 'dev' : 'prod'}`,
63
65
  linkedDeliveryBackend: `${portalBackendUrl}/linked-deliveries`,
64
66
  menuBackendUrl: `${portalBackendUrl}/menu-v4`,
65
67
  smsBackendUrl: `https://sms${domain}`,
66
- accountBackendUrl
68
+ accountBackendUrl,
69
+ marketingBackendUrl
67
70
  }
68
71
  }
69
72
 
@@ -179,6 +182,11 @@ export const smsBackendClientInstance = (): AxiosInstance => {
179
182
  return baseClientInstance('', 'portal', { url: smsBackendUrl })
180
183
  }
181
184
 
185
+ export const marketingBackendClientInstance = (): AxiosInstance => {
186
+ const { marketingBackendUrl } = SvcConfig.getBackendUrl()
187
+ return baseClientInstance('', 'portal', { url: marketingBackendUrl })
188
+ }
189
+
182
190
  export function getData<T>(response: AxiosResponse<T>): T {
183
191
  return response.data
184
192
  }
@@ -264,6 +264,29 @@
264
264
  "pickupCatalog": "Pickup catalog",
265
265
  "DeliverySettingUpdated": "Delivery setting updated.",
266
266
  "selectPlatform": "Select Platform",
267
- "platform": "Platform"
267
+ "platform": "Platform",
268
+ "discountRule": {
269
+ "add": "Add discount rule",
270
+ "description": "Define how the discount is applied to the bill. Require POS version {minPosVersion} or above.",
271
+ "effect": "Promotion/Vouchers",
272
+ "effectSelected": "{count} selected",
273
+ "effectUsedInOtherGroup": "Used in another rule",
274
+ "forceSync": "Force sync",
275
+ "latest": "Latest",
276
+ "loadingRestaurants": "Loading restaurants",
277
+ "maxTotalUses": "Max total uses",
278
+ "maxTotalUsesSublabel": "Maximum times promotions/vouchers can be used per bill",
279
+ "outdated": "Outdated",
280
+ "restaurantName": "Restaurant Name",
281
+ "restaurants": "Restaurants",
282
+ "restaurantsDescription": "Sync status of the discount rule across all restaurants",
283
+ "selectAllEffects": "Select all promotions/vouchers",
284
+ "selectEffects": "Select promotions/vouchers",
285
+ "status": "Status",
286
+ "syncSuccess": "Discount rule setting synced to all restaurants",
287
+ "title": "Discount Rule",
288
+ "updateSuccess": "Discount rule setting updated",
289
+ "version": "Version"
290
+ }
268
291
  }
269
292
  }
@@ -259,6 +259,29 @@
259
259
  "pickupCatalog": "แคตตาล็อกการรับสินค้า",
260
260
  "DeliverySettingUpdated": "อัปเดตการตั้งค่าการจัดส่งแล้ว",
261
261
  "selectPlatform": "เลือกแพลตฟอร์ม",
262
- "platform": "แพลตฟอร์ม"
262
+ "platform": "แพลตฟอร์ม",
263
+ "discountRule": {
264
+ "add": "เพิ่มกฎส่วนลด",
265
+ "description": "กำหนดวิธีการใช้ส่วนลดในบิล ใช้ได้กับ POS เวอร์ชัน {minPosVersion} หรือใหม่กว่าเท่านั้น",
266
+ "effect": "โปรโมชั่น/บัตรกำนัล",
267
+ "effectSelected": "เลือกแล้ว {count} รายการ",
268
+ "effectUsedInOtherGroup": "ถูกใช้ในกฎอื่น",
269
+ "forceSync": "ซิงค์ข้อมูลแบบบังคับ",
270
+ "latest": "เผยแพร่ล่าสุด",
271
+ "loadingRestaurants": "กำลังโหลดร้านอาหาร",
272
+ "maxTotalUses": "จำนวนการใช้งานสูงสุด",
273
+ "maxTotalUsesSublabel": "จำนวนครั้งสูงสุดที่สามารถใช้โปรโมชั่น/บัตรกำนัลต่อบิล",
274
+ "outdated": "ล้าสมัย",
275
+ "restaurantName": "ชื่อร้านอาหาร",
276
+ "restaurants": "ร้านอาหาร",
277
+ "restaurantsDescription": "สถานะการซิงค์กฎส่วนลดของทุกร้านอาหาร",
278
+ "selectAllEffects": "เลือกโปรโมชั่น/บัตรกำนัลทั้งหมด",
279
+ "selectEffects": "เลือกโปรโมชั่น/บัตรกำนัล",
280
+ "status": "สถานะ",
281
+ "syncSuccess": "ซิงค์กฎส่วนลดไปยังร้านอาหารทั้งหมดเรียบร้อยแล้ว",
282
+ "title": "กฎส่วนลด",
283
+ "updateSuccess": "อัปเดตกฎส่วนลดเรียบร้อยแล้ว",
284
+ "version": "เวอร์ชัน"
285
+ }
263
286
  }
264
287
  }
@@ -91,6 +91,7 @@
91
91
  "edit": "编辑",
92
92
  "editOfflinePayment": "编辑线下支付方式",
93
93
  "editPickupPoint": "编辑取货地点",
94
+ "effectSelected": "已选择效果",
94
95
  "enableServiceCharge": "启用服务费",
95
96
  "end": "结束",
96
97
  "enterAddress": "输入地址",
@@ -203,6 +204,8 @@
203
204
  "search": "搜索",
204
205
  "searchRestaurant": "搜索餐厅",
205
206
  "selectAllItemsIncludeCustomItem": "全部 (包括自定义商品)",
207
+ "selectEffects": "选择效果",
208
+ "selectAllEffects": "选择所有效果",
206
209
  "selectItem": "请选择",
207
210
  "selectRestaurant": "选择餐厅",
208
211
  "selectServiceChargeType": "选择服务费类型",
@@ -264,6 +267,29 @@
264
267
  "pickupCatalog": "自取目录",
265
268
  "DeliverySettingUpdated": "配送设置已更新",
266
269
  "selectPlatform": "选择平台",
267
- "platform": "平台"
270
+ "platform": "平台",
271
+ "discountRule": {
272
+ "add": "添加折扣规则",
273
+ "description": "定义折扣在账单中如何应用。仅适用于POS版本{minPosVersion}或更高版本。",
274
+ "effect": "促销/代金券",
275
+ "effectSelected": "已选择{count}个",
276
+ "effectUsedInOtherGroup": "已在其他规则中使用",
277
+ "forceSync": "强制同步",
278
+ "latest": "已发布",
279
+ "loadingRestaurants": "正在加载餐厅",
280
+ "maxTotalUses": "最大使用次数",
281
+ "maxTotalUsesSublabel": "每张账单最多可使用促销/代金券次数",
282
+ "outdated": "过时",
283
+ "restaurantName": "餐厅名称",
284
+ "restaurants": "餐厅",
285
+ "restaurantsDescription": "所有餐厅的折扣规则同步状态",
286
+ "selectAllEffects": "选择所有促销/代金券",
287
+ "selectEffects": "选择促销/代金券",
288
+ "status": "状态",
289
+ "syncSuccess": "折扣规则设置已同步到所有餐厅",
290
+ "title": "折扣规则",
291
+ "updateSuccess": "折扣规则设置已更新",
292
+ "version": "版本"
293
+ }
268
294
  }
269
295
  }
@@ -0,0 +1,45 @@
1
+ import { defineStore } from 'pinia'
2
+ import { FdtoDiscountRuleRes, FdoDiscountRule } from '@feedmepos/core/entity'
3
+ import { useCoreStore } from '@feedmepos/mf-common'
4
+ import { ref } from 'vue'
5
+ import { businessApi } from '@/api/business'
6
+
7
+ interface BusinessState {
8
+ discountRule?: FdtoDiscountRuleRes
9
+ }
10
+
11
+ function initBusinessState(): BusinessState {
12
+ return {
13
+ discountRule: undefined
14
+ }
15
+ }
16
+
17
+ export const useBusinessStore = defineStore('business', () => {
18
+ const coreStore = useCoreStore()
19
+ const state = ref(initBusinessState())
20
+
21
+ async function readDiscountRule(): Promise<FdtoDiscountRuleRes> {
22
+ if (!coreStore.currentBusiness.value?._id) {
23
+ throw new Error('No business selected.')
24
+ }
25
+ const discountRule = await businessApi.readDiscountRule(coreStore.currentBusiness.value._id)
26
+ state.value.discountRule = discountRule
27
+ return discountRule
28
+ }
29
+ async function updateDiscountRule(discountRule: FdoDiscountRule): Promise<FdtoDiscountRuleRes> {
30
+ if (!coreStore.currentBusiness.value?._id) {
31
+ throw new Error('No business selected.')
32
+ }
33
+ const updatedRule = await businessApi.updateDiscountRule(
34
+ coreStore.currentBusiness.value._id,
35
+ discountRule
36
+ )
37
+ state.value.discountRule = updatedRule
38
+ return updatedRule
39
+ }
40
+ return {
41
+ state: state.value,
42
+ readDiscountRule,
43
+ updateDiscountRule
44
+ }
45
+ })
@@ -13,6 +13,8 @@ import {
13
13
  type FdoAddress,
14
14
  type FdoProfile,
15
15
  FdoRestaurant,
16
+ FdoRestaurantSetting,
17
+ type FdoEffectGroup
16
18
  } from '@feedmepos/core/entity'
17
19
  import { FdoExternalSetting, FdoGrabfoodSettings } from '@entity'
18
20
  import { FeatureFlag, Pos } from '@feedmepos/core'
@@ -145,6 +147,6 @@ export const useRestaurantStore = defineStore('restaurant', () => {
145
147
  updateIntegratedGrabfoodDelivery,
146
148
  updateIntegratedShopeefoodDelivery,
147
149
  updateExternalDelivery,
148
- getRestaurantEPayment
150
+ getRestaurantEPayment,
149
151
  }
150
152
  })
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <div class="py-[1.5rem]">
3
- <FmPageHead :title="t('order.orderSetting')"/>
3
+ <FmPageHead :title="t('order.orderSetting')" />
4
4
  <div class="flex px-[1.5rem]">
5
5
  <div class="flex-[2_2_0%] overflow-auto">
6
- <FmTabs v-model:model-value="selectedOrderSetting" :items="settingItem" />
6
+ <FmTabs v-model:model-value="selectedOrderSetting" :items="settingItem" :showMoreAt="99" />
7
7
  </div>
8
8
  </div>
9
9
  </div>
@@ -18,11 +18,20 @@ import DineInSetting from './dine-in/DineInSetting.vue'
18
18
  import PickUpSetting from './pickup/PickUpSetting.vue'
19
19
  import SmsSetting from './sms/SmsSetting.vue'
20
20
  import ServiceChargeSetting from './servicecharge/ServiceChargeSetting.vue'
21
+ import DiscountRuleSetting from './discount-rule/DiscountRuleSetting.vue'
22
+
21
23
  import GeneralSetting from './general/GeneralSetting.vue'
22
24
  import { useI18n } from '@feedmepos/mf-common'
23
25
 
24
26
  const { t } = useI18n()
25
- type OrderSettingMenuItemValue = 'delivery' | 'pickup' | 'dinein' | 'servicecharge' | 'sms' | 'general'
27
+ type OrderSettingMenuItemValue =
28
+ | 'delivery'
29
+ | 'pickup'
30
+ | 'dinein'
31
+ | 'servicecharge'
32
+ | 'sms'
33
+ | 'discountRule'
34
+ | 'general'
26
35
  const selectedOrderSetting = ref<OrderSettingMenuItemValue>('delivery')
27
36
 
28
37
  const settingItem = computed<FmTabProps[]>(() => [
@@ -30,8 +39,9 @@ const settingItem = computed<FmTabProps[]>(() => [
30
39
  { label: t('order.pickup'), value: 'pickup' },
31
40
  { label: t('order.dineIn'), value: 'dinein' },
32
41
  { label: t('order.serviceCharge'), value: 'servicecharge' },
42
+ { label: t('order.discountRule.title'), value: 'discountRule' },
33
43
  { label: t('order.sms'), value: 'sms' },
34
- { label: t('order.general'), value: 'general'},
44
+ { label: t('order.general'), value: 'general' }
35
45
  ])
36
46
 
37
47
  const currentComponent = computed(() => {
@@ -46,7 +56,9 @@ const currentComponent = computed(() => {
46
56
  return SmsSetting
47
57
  case 'servicecharge':
48
58
  return ServiceChargeSetting
49
- case 'general':
59
+ case 'discountRule':
60
+ return DiscountRuleSetting
61
+ case 'general':
50
62
  return GeneralSetting
51
63
  }
52
64
  })