@feedmepos/mf-order-setting 0.0.21-beta.3 → 0.0.22
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.
- package/dist/{KioskDevicesView-Cb7Rw7t8.js → KioskDevicesView-C6YmdLKc.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-raPhhBpi.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-DiLHpWbm.js} +2 -2
- package/dist/{KioskSettingView-BQgyeWbo.js → KioskSettingView-D-muNxlb.js} +1 -1
- package/dist/{KioskView-BLkuqfZ_.js → KioskView-kcjjk4fF.js} +4 -4
- package/dist/{OrderSettingsView-BJ1b1Qjg.js → OrderSettingsView-D_bGK-3J.js} +34007 -32821
- package/dist/{app-BY258ajB.js → app-C5qwExhL.js} +41 -23
- package/dist/app.js +1 -1
- package/dist/common/convertor/index.d.ts +2 -0
- package/dist/common/sms/index.d.ts +1 -1
- package/dist/common/util/index.d.ts +6 -0
- package/dist/{dayjs.min-4COVK72W.js → dayjs.min-kEC9G7bx.js} +36 -36
- package/dist/frontend/mf-order/src/api/remoteOrder/index.d.ts +5 -2
- package/dist/frontend/mf-order/src/app.d.ts +18 -0
- package/dist/frontend/mf-order/src/helpers/menu.d.ts +1 -1
- package/dist/frontend/mf-order/src/stores/app/index.d.ts +14 -4
- package/dist/frontend/mf-order/src/stores/menu/menu.d.ts +45 -35
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +581 -716
- package/dist/frontend/mf-order/src/views/all-orders/ReflowOrder.vue.d.ts +140 -174
- package/dist/frontend/mf-order/src/views/order-settings/delivery/DeliverySetting.vue.d.ts +2 -2
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.d.ts +2 -1
- package/dist/frontend/mf-order/src/views/order-settings/delivery/delivery.data.d.ts +3 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue.d.ts +97 -0
- package/dist/frontend/mf-order/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue.d.ts +3 -3
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{index-t_7ThPjm.js → index-C_53CwBa.js} +2 -2
- package/dist/package/entity/booking/booking.do.d.ts +1516 -1276
- package/dist/package/entity/delivery/delivery.dto.d.ts +298 -251
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +539 -0
- package/dist/package/entity/incoming-order/incoming-order.do.d.ts +114 -9
- package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +862 -4
- package/dist/package/entity/incoming-order/incoming-order.enum.d.ts +1 -1
- package/dist/package/entity/index.d.ts +34 -22
- package/dist/package/entity/kiosk/kiosk.do.d.ts +12 -12
- package/dist/package/entity/kiosk/kiosk.dto.d.ts +12 -12
- package/dist/package/entity/kiosk/marketing/marketing.dto.d.ts +1942 -1642
- package/dist/package/entity/member/member.dto.d.ts +33 -0
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +15 -0
- package/dist/package/entity/order/order.do.d.ts +37 -0
- package/dist/package/entity/order/order.dto.d.ts +808 -17435
- package/dist/package/entity/order/order.enum.d.ts +2 -0
- package/dist/package/entity/order-platform/external/auth/external-auth.do.d.ts +12 -0
- package/dist/package/entity/order-platform/external/auth/external-auth.dto.d.ts +27 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.do.d.ts +2868 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.dto.d.ts +21 -0
- package/dist/package/entity/order-platform/external/menu/external-menu.enum.d.ts +3 -0
- package/dist/package/entity/order-platform/external/order/external-order.do.d.ts +1373 -0
- package/dist/package/entity/order-platform/external/order/external-order.dto.d.ts +2834 -0
- package/dist/package/entity/order-platform/external/order/external-order.enum.d.ts +9 -0
- package/dist/package/entity/order-platform/external/setting/external-setting.do.d.ts +127 -0
- package/dist/package/entity/order-platform/external/setting/external-setting.dto.d.ts +95 -0
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.do.d.ts +82 -82
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +339 -291
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.do.d.ts +4 -4
- package/dist/package/entity/order-platform/foodpanda/foodpanda-settings.dto.d.ts +3 -3
- package/dist/package/entity/order-platform/grabfood/grabfood-menu.do.d.ts +65 -65
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +311 -263
- package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +2 -2
- package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +7 -7
- package/dist/package/entity/order-platform/menu.dto.d.ts +126 -0
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +4 -4
- package/dist/package/entity/order-platform/order-platform.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +298 -250
- package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +0 -41
- package/dist/package/entity/printer/printer.do.d.ts +2 -2
- package/dist/package/entity/pubsub/ably/ably.do.d.ts +60 -9
- package/dist/package/entity/pubsub/ably/ably.enum.d.ts +1 -1
- package/dist/package/entity/queue/queue.do.d.ts +40 -0
- package/dist/{auth.dto-BOoRSQkS.js → queue.do-Vog69wnQ.js} +30760 -30095
- package/package.json +4 -3
- package/src/api/remoteOrder/index.ts +13 -2
- package/src/helpers/menu.ts +2 -2
- package/src/locales/en-US.json +11 -1
- package/src/locales/zh-CN.json +10 -1
- package/src/stores/restaurant/index.ts +4 -1
- package/src/views/order-settings/delivery/DeliverySetting.vue +82 -6
- package/src/views/order-settings/delivery/delivery.data.ts +16 -1
- package/src/views/order-settings/delivery/delivery.ts +1 -0
- package/src/views/order-settings/delivery/integrated-delivery/ExternalSetting.vue +114 -0
- package/src/views/order-settings/delivery/integrated-delivery/FoodpandaSetting.vue +23 -6
- package/src/views/order-settings/delivery/integrated-delivery/GrabfoodSetting.vue +21 -16
- package/src/views/order-settings/delivery/integrated-delivery/ShopeefoodSetting.vue +58 -59
- package/src/views/order-settings/pickup/PickUpSetting.vue +1 -1
- package/src/views/order-settings/servicecharge/ServiceChargeRule.vue +214 -158
- package/src/views/order-settings/servicecharge/ServiceChargeSetting.vue +1 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import type { CategorizedItem } from '@/helpers/menu'
|
|
2
|
+
import { type PropType, computed, onMounted, ref, watch } from 'vue'
|
|
3
|
+
import type { CategorizedItem, Item } from '@/helpers/menu'
|
|
5
4
|
import RateInput from './RateInput.vue'
|
|
6
5
|
import type { FdoServiceChargeRule, FdoTable } from '@feedmepos/core/entity'
|
|
7
6
|
import type { AdjustmentAmount } from '@/helpers/number'
|
|
@@ -46,14 +45,6 @@ const emits = defineEmits<{
|
|
|
46
45
|
(event: 'delete'): void
|
|
47
46
|
}>()
|
|
48
47
|
|
|
49
|
-
const itemSelected = computed(() => {
|
|
50
|
-
if (props.isLoadingMenu) return t('order.loadingMenu')
|
|
51
|
-
if (!props.items.length) return t('order.noAvailableItem')
|
|
52
|
-
const items = props.modelValue.condition.items
|
|
53
|
-
if (!items) return t('order.all')
|
|
54
|
-
return `${items.length} ${t('order.item')}`
|
|
55
|
-
})
|
|
56
|
-
|
|
57
48
|
const tableSelected = computed(() => {
|
|
58
49
|
if (props.isLoadingTable) return t('order.loadingTable')
|
|
59
50
|
if (!props.tables.length) return t('order.noAvailableTable')
|
|
@@ -76,8 +67,8 @@ function convertServiceChargeOrderToI18n(serviceChargeType: ServiceChargeOrderTy
|
|
|
76
67
|
return t('order.dineIn')
|
|
77
68
|
case ServiceChargeOrderType.takeaway:
|
|
78
69
|
return t('order.takeaway')
|
|
79
|
-
case ServiceChargeOrderType.inHouseDelivery:
|
|
80
|
-
return t('order.deliveryTitle', {company:
|
|
70
|
+
case ServiceChargeOrderType.inHouseDelivery:
|
|
71
|
+
return t('order.deliveryTitle', { company: 'In house' })
|
|
81
72
|
case ServiceChargeOrderType.deliveryCompany:
|
|
82
73
|
return t('order.deliveryCompany')
|
|
83
74
|
case ServiceChargeOrderType.pickup:
|
|
@@ -99,33 +90,6 @@ const diningValue = computed(() => {
|
|
|
99
90
|
return props.modelValue.condition.orderType
|
|
100
91
|
})
|
|
101
92
|
|
|
102
|
-
let initialValue = props.modelValue.condition.items
|
|
103
|
-
if (!initialValue) {
|
|
104
|
-
initialValue = props.items.reduce<string[]>((pv, category) => {
|
|
105
|
-
pv = [...pv, ...category.items.map((item) => item._id)]
|
|
106
|
-
return pv
|
|
107
|
-
}, [])
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
let initialValueTable = props.modelValue.condition.tables || props.tables.map((table) => table.name)
|
|
111
|
-
if (!initialValueTable) {
|
|
112
|
-
initialValueTable = props.tables.map((table) => table.name)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const itemValue = ref<string[]>(initialValue)
|
|
116
|
-
const tableValue = ref<string[]>(initialValueTable)
|
|
117
|
-
|
|
118
|
-
function updateItems() {
|
|
119
|
-
sideSheetItem.value = false
|
|
120
|
-
emits('update:model-value', {
|
|
121
|
-
...props.modelValue,
|
|
122
|
-
condition: {
|
|
123
|
-
...props.modelValue.condition,
|
|
124
|
-
items: itemValue.value
|
|
125
|
-
}
|
|
126
|
-
})
|
|
127
|
-
}
|
|
128
|
-
|
|
129
93
|
function updateTable() {
|
|
130
94
|
sideSheetTable.value = false
|
|
131
95
|
emits('update:model-value', {
|
|
@@ -137,17 +101,6 @@ function updateTable() {
|
|
|
137
101
|
})
|
|
138
102
|
}
|
|
139
103
|
|
|
140
|
-
function modifyItems(items: string[], parentId: string) {
|
|
141
|
-
itemValue.value = items
|
|
142
|
-
const parentItem = props.items.find((item) => item.id === parentId)
|
|
143
|
-
if (parentItem) {
|
|
144
|
-
const parentSelected = parentItem.items.every((subItem) =>
|
|
145
|
-
itemValue.value.includes(subItem._id)
|
|
146
|
-
)
|
|
147
|
-
selectedCategoryItems.value[parentId] = parentSelected
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
104
|
function updateRate(v: AdjustmentAmount) {
|
|
152
105
|
emits('update:model-value', {
|
|
153
106
|
...props.modelValue,
|
|
@@ -168,13 +121,6 @@ function updateDiningOption(options: F_SERVICE_CHARGE_ORDER_TYPE[]) {
|
|
|
168
121
|
const sideSheetItem = ref<boolean>(false)
|
|
169
122
|
const sideSheetTable = ref<boolean>(false)
|
|
170
123
|
|
|
171
|
-
function toggleSideSheet() {
|
|
172
|
-
sideSheetItem.value = true
|
|
173
|
-
}
|
|
174
|
-
function toggleSideSheetTable() {
|
|
175
|
-
sideSheetTable.value = true
|
|
176
|
-
}
|
|
177
|
-
|
|
178
124
|
const parent = ref<boolean>(false)
|
|
179
125
|
const nestedVal = ref<F_SERVICE_CHARGE_ORDER_TYPE[]>(diningValue.value)
|
|
180
126
|
|
|
@@ -196,101 +142,128 @@ function handleChildUpdate(ev: F_SERVICE_CHARGE_ORDER_TYPE[]) {
|
|
|
196
142
|
updateDiningOption(ev)
|
|
197
143
|
}
|
|
198
144
|
|
|
199
|
-
|
|
200
|
-
const
|
|
145
|
+
//Table
|
|
146
|
+
const tableValue = ref<string[] | null | undefined>(props.modelValue.condition.tables)
|
|
201
147
|
|
|
148
|
+
const selectedTables = computed<Record<string, { isSelected: boolean }>>(() => {
|
|
149
|
+
return props.tables?.reduce((pv: Record<string, { isSelected: boolean }>, curr: FdoTable) => {
|
|
150
|
+
const isSelected = !tableValue.value || tableValue.value?.includes(curr.name)
|
|
151
|
+
|
|
152
|
+
pv[curr.name ?? ''] = {
|
|
153
|
+
isSelected
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return pv
|
|
157
|
+
}, {})
|
|
158
|
+
})
|
|
202
159
|
const checkboxChildrenTable = computed(() => {
|
|
203
|
-
const tables = props.tables.map((table) => table.name)
|
|
160
|
+
const tables = props.tables.map((table: FdoTable) => table.name)
|
|
204
161
|
return Array.isArray(tables) ? tables : []
|
|
205
162
|
})
|
|
206
163
|
|
|
207
164
|
function handleParentUpdateTable(ev: boolean) {
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
tableValue.value =
|
|
165
|
+
if (ev) {
|
|
166
|
+
tableValue.value = null
|
|
167
|
+
} else {
|
|
168
|
+
tableValue.value = []
|
|
212
169
|
}
|
|
213
170
|
}
|
|
214
171
|
|
|
215
|
-
function handleChildUpdateTable(ev: string
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if (Array.isArray(nestedValTable.value) && Array.isArray(checkboxChildrenTable.value)) {
|
|
225
|
-
parentTable.value = nestedValTable.value.length === checkboxChildrenTable.value.length
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
if (props.items.length > 0) {
|
|
229
|
-
selectedCategoryItems.value = props.items.reduce(
|
|
230
|
-
(acc, item) => {
|
|
231
|
-
const allSubItemsSelected = item.items.every((subItem) =>
|
|
232
|
-
itemValue.value.includes(subItem._id)
|
|
233
|
-
)
|
|
234
|
-
acc[item.id ?? ''] = allSubItemsSelected
|
|
235
|
-
return acc
|
|
236
|
-
},
|
|
237
|
-
{} as Record<string, boolean>
|
|
238
|
-
)
|
|
172
|
+
function handleChildUpdateTable(ev: boolean, name: string) {
|
|
173
|
+
if (ev) {
|
|
174
|
+
tableValue.value = [...(tableValue.value ?? []), name]
|
|
175
|
+
} else {
|
|
176
|
+
if (!tableValue.value) {
|
|
177
|
+
tableValue.value = props.tables.map((t) => t.name)
|
|
178
|
+
}
|
|
179
|
+
tableValue.value = tableValue.value.filter((t) => t !== name)
|
|
239
180
|
}
|
|
240
181
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const selectedCategoryItems = ref<Record<string, boolean>>({})
|
|
246
|
-
|
|
247
|
-
function handleCategorySelection(categoryId: string, isSelected: boolean) {
|
|
248
|
-
selectedCategoryItems.value = {
|
|
249
|
-
...selectedCategoryItems.value,
|
|
250
|
-
[categoryId]: isSelected
|
|
251
|
-
}
|
|
252
|
-
if (isSelected) {
|
|
253
|
-
itemValue.value = [
|
|
254
|
-
...itemValue.value,
|
|
255
|
-
...(props.items.find((item) => item.id === categoryId)?.items.map((subItem) => subItem._id) ||
|
|
256
|
-
[])
|
|
257
|
-
]
|
|
258
|
-
} else {
|
|
259
|
-
itemValue.value = itemValue.value.filter(
|
|
260
|
-
(id) =>
|
|
261
|
-
!props.items
|
|
262
|
-
.find((item) => item.id === categoryId)
|
|
263
|
-
?.items.map((subItem) => subItem._id)
|
|
264
|
-
.includes(id)
|
|
265
|
-
)
|
|
182
|
+
tableValue.value = Array.from(new Set(tableValue.value))
|
|
183
|
+
if (tableValue.value.length === props.tables.length) {
|
|
184
|
+
tableValue.value = null
|
|
266
185
|
}
|
|
267
186
|
}
|
|
268
187
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const selectedSubItemsCount = parentItem.items.filter((subItem) =>
|
|
274
|
-
itemValue.value.includes(subItem._id)
|
|
275
|
-
).length
|
|
276
|
-
return selectedSubItemsCount > 0 && selectedSubItemsCount < parentItem.items.length
|
|
277
|
-
}
|
|
188
|
+
onMounted(() => {
|
|
189
|
+
parent.value = nestedVal.value.length === checkboxChildren.value.length
|
|
190
|
+
initializeMenuState(filteredItem.value)
|
|
191
|
+
})
|
|
278
192
|
|
|
279
193
|
const searchValueTable = ref('')
|
|
280
|
-
|
|
281
194
|
const filteredTable = computed(() =>
|
|
282
|
-
props.tables.filter((e) =>
|
|
195
|
+
props.tables.filter((e: FdoTable) =>
|
|
283
196
|
searchValueTable.value
|
|
284
197
|
? e.name.toLocaleLowerCase().includes(searchValueTable.value.toLocaleLowerCase())
|
|
285
198
|
: true
|
|
286
199
|
)
|
|
287
200
|
)
|
|
288
201
|
|
|
202
|
+
const showTable = ref(true)
|
|
203
|
+
function toggleShowTable() {
|
|
204
|
+
showTable.value = !showTable.value
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const showMenuState = ref<Record<string, boolean>>({})
|
|
208
|
+
function toggleShowMenu(itemId: number) {
|
|
209
|
+
showMenuState.value[itemId] = !showMenuState.value[itemId]
|
|
210
|
+
}
|
|
211
|
+
function initializeMenuState(items: any[]) {
|
|
212
|
+
showMenuState.value = items.reduce(
|
|
213
|
+
(acc, _, index) => {
|
|
214
|
+
acc[index] = true
|
|
215
|
+
return acc
|
|
216
|
+
},
|
|
217
|
+
{} as Record<number, boolean>
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//Items
|
|
289
222
|
const searchValueItem = ref('')
|
|
290
223
|
|
|
224
|
+
const itemValue = ref<string[] | null | undefined>(props.modelValue.condition.items)
|
|
225
|
+
|
|
226
|
+
const selectedCategories = computed<
|
|
227
|
+
Record<string, { isAllSelected: boolean; isSomeSelected: boolean }>
|
|
228
|
+
>(() => {
|
|
229
|
+
return props.items?.reduce(
|
|
230
|
+
(
|
|
231
|
+
pv: Record<string, { isAllSelected: boolean; isSomeSelected: boolean }>,
|
|
232
|
+
curr: CategorizedItem
|
|
233
|
+
) => {
|
|
234
|
+
const selectedItems = curr.items.filter((itm) => itemValue.value?.includes(itm._id))
|
|
235
|
+
const _isAllItemSelected = !itemValue.value || selectedItems.length === curr.items.length
|
|
236
|
+
|
|
237
|
+
const isSomeSelected = !itemValue.value || selectedItems.length > 0
|
|
238
|
+
|
|
239
|
+
pv[curr?.id ?? ''] = {
|
|
240
|
+
isAllSelected: _isAllItemSelected,
|
|
241
|
+
isSomeSelected
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return pv
|
|
245
|
+
},
|
|
246
|
+
{}
|
|
247
|
+
)
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
const totalCategorizedItemsCount = computed(() => {
|
|
251
|
+
return props.items.reduce((pv: number, curr: CategorizedItem) => {
|
|
252
|
+
pv += curr.items.length
|
|
253
|
+
return pv
|
|
254
|
+
}, 0)
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
const itemSelected = computed(() => {
|
|
258
|
+
if (props.isLoadingMenu) return t('order.loadingMenu')
|
|
259
|
+
if (!props.items.length) return t('order.noAvailableItem')
|
|
260
|
+
const items = props.modelValue.condition.items
|
|
261
|
+
if (!items) return t('order.all')
|
|
262
|
+
return `${items.length} ${t('order.item')}`
|
|
263
|
+
})
|
|
291
264
|
const filteredItem = computed(() => {
|
|
292
265
|
return props.items
|
|
293
|
-
.map((item) => {
|
|
266
|
+
.map((item: CategorizedItem) => {
|
|
294
267
|
const filteredSubItems = item.items.filter((subItem) =>
|
|
295
268
|
searchValueItem.value
|
|
296
269
|
? subItem.name.toLowerCase().includes(searchValueItem.value.toLowerCase())
|
|
@@ -302,27 +275,79 @@ const filteredItem = computed(() => {
|
|
|
302
275
|
items: filteredSubItems
|
|
303
276
|
}
|
|
304
277
|
})
|
|
305
|
-
.filter((item) => item.items.length > 0)
|
|
278
|
+
.filter((item: CategorizedItem) => item.items.length > 0)
|
|
306
279
|
})
|
|
307
280
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
281
|
+
function selectAllItems(v: boolean) {
|
|
282
|
+
if (v) {
|
|
283
|
+
itemValue.value = null
|
|
284
|
+
} else {
|
|
285
|
+
itemValue.value = []
|
|
286
|
+
}
|
|
311
287
|
}
|
|
312
288
|
|
|
313
|
-
|
|
289
|
+
function handleCategorySelection(categoryId: string, isSelected: boolean) {
|
|
290
|
+
initItemValue(isSelected)
|
|
314
291
|
|
|
315
|
-
|
|
316
|
-
|
|
292
|
+
const categoryItems =
|
|
293
|
+
props.items.find((item: CategorizedItem) => item.id === categoryId)?.items ?? []
|
|
294
|
+
const categoryItemIds = categoryItems.map((ci: Item) => ci._id)
|
|
295
|
+
if (isSelected) {
|
|
296
|
+
itemValue.value = [...(itemValue.value ?? []), ...categoryItemIds]
|
|
297
|
+
} else {
|
|
298
|
+
itemValue.value = itemValue.value?.filter((id: string) => !categoryItemIds.includes(id))
|
|
299
|
+
}
|
|
300
|
+
itemValue.value = Array.from(new Set(itemValue.value))
|
|
317
301
|
}
|
|
318
302
|
|
|
319
|
-
function
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
303
|
+
function initItemValue(v: boolean) {
|
|
304
|
+
if (!itemValue.value) {
|
|
305
|
+
if (v) {
|
|
306
|
+
itemValue.value = []
|
|
307
|
+
} else {
|
|
308
|
+
itemValue.value = props.items.reduce((pv: string[], curr: CategorizedItem) => {
|
|
309
|
+
pv = [...pv, ...curr.items.map((i) => i._id)]
|
|
310
|
+
return pv
|
|
311
|
+
}, [])
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function modifyItems(v: boolean, subItemId: string) {
|
|
317
|
+
initItemValue(v)
|
|
318
|
+
if (v) {
|
|
319
|
+
itemValue.value = [...(itemValue.value ?? []), subItemId]
|
|
320
|
+
} else {
|
|
321
|
+
itemValue.value = itemValue.value?.filter((i: string) => i !== subItemId)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
itemValue.value = Array.from(new Set(itemValue.value))
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
function updateItems() {
|
|
328
|
+
sideSheetItem.value = false
|
|
329
|
+
emits('update:model-value', {
|
|
330
|
+
...props.modelValue,
|
|
331
|
+
condition: {
|
|
332
|
+
...props.modelValue.condition,
|
|
333
|
+
items: itemValue.value
|
|
334
|
+
}
|
|
335
|
+
})
|
|
324
336
|
}
|
|
325
337
|
|
|
338
|
+
function toggleSideSheet() {
|
|
339
|
+
sideSheetItem.value = true
|
|
340
|
+
}
|
|
341
|
+
function toggleSideSheetTable() {
|
|
342
|
+
sideSheetTable.value = true
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
watch(
|
|
346
|
+
() => props.items,
|
|
347
|
+
() => {
|
|
348
|
+
initializeMenuState(filteredItem.value)
|
|
349
|
+
}
|
|
350
|
+
)
|
|
326
351
|
</script>
|
|
327
352
|
|
|
328
353
|
<template>
|
|
@@ -338,19 +363,31 @@ function initializeMenuState(items: any[]) {
|
|
|
338
363
|
<FmSideSheet :header="t('order.selectItem')" :maxWidth="600" dismiss-away v-model="sideSheetItem">
|
|
339
364
|
<div>
|
|
340
365
|
<div class="text-fm-color-typo-secondary mt-5 mb-5 flex flex-row">
|
|
341
|
-
{{
|
|
342
|
-
|
|
366
|
+
{{ itemValue?.length ?? totalCategorizedItemsCount }}
|
|
367
|
+
{{ t('order.productSelected') }}
|
|
368
|
+
<FmSearch
|
|
369
|
+
v-model:model-value="searchValueItem"
|
|
370
|
+
class="ml-auto"
|
|
371
|
+
:placeholder="t('order.search')"
|
|
372
|
+
/>
|
|
343
373
|
</div>
|
|
344
374
|
|
|
375
|
+
<FmCheckbox
|
|
376
|
+
:label="t('order.selectAllItemsIncludeCustomItem')"
|
|
377
|
+
:model-value="!itemValue"
|
|
378
|
+
value=""
|
|
379
|
+
@update:model-value="(v: boolean) => selectAllItems(v)"
|
|
380
|
+
></FmCheckbox>
|
|
381
|
+
|
|
345
382
|
<div v-for="(item, index) in filteredItem" :key="index" class="flex flex-col mb-6">
|
|
346
383
|
<FmCard variant="outlined" class="p-5">
|
|
347
384
|
<div class="fm-corner-radius-lg flex flex-col">
|
|
348
385
|
<div class="flex flex-row">
|
|
349
386
|
<div class="flex flex-row">
|
|
350
387
|
<FmCheckbox
|
|
351
|
-
:model-value="
|
|
388
|
+
:model-value="selectedCategories[item.id ?? ''].isAllSelected"
|
|
352
389
|
value=""
|
|
353
|
-
:indeterminate="
|
|
390
|
+
:indeterminate="selectedCategories[item.id ?? ''].isSomeSelected"
|
|
354
391
|
@update:model-value="handleCategorySelection(item.id ?? '', $event)"
|
|
355
392
|
/>
|
|
356
393
|
<div class="font-bold ml-2">{{ item.name }}</div>
|
|
@@ -374,11 +411,12 @@ function initializeMenuState(items: any[]) {
|
|
|
374
411
|
<FmCheckbox
|
|
375
412
|
v-for="(subItem, subIndex) in item.items"
|
|
376
413
|
:key="subIndex"
|
|
377
|
-
:model-value="itemValue"
|
|
414
|
+
:model-value="!itemValue || itemValue.includes(subItem._id)"
|
|
378
415
|
:label="subItem.name"
|
|
379
416
|
:value="subItem._id"
|
|
380
|
-
@update:model-value="(
|
|
381
|
-
|
|
417
|
+
@update:model-value="(v: boolean) => modifyItems(v, subItem._id)"
|
|
418
|
+
>
|
|
419
|
+
</FmCheckbox>
|
|
382
420
|
</div>
|
|
383
421
|
</div>
|
|
384
422
|
</FmCard>
|
|
@@ -387,7 +425,12 @@ function initializeMenuState(items: any[]) {
|
|
|
387
425
|
<template #side-sheet-footer>
|
|
388
426
|
<div class="flex gap-8 items-center justify-start">
|
|
389
427
|
<FmButton variant="primary" :label="t('order.confirm')" size="lg" @click="updateItems" />
|
|
390
|
-
<FmButton
|
|
428
|
+
<FmButton
|
|
429
|
+
variant="secondary"
|
|
430
|
+
:label="t('order.cancel')"
|
|
431
|
+
size="lg"
|
|
432
|
+
@click="sideSheetItem = false"
|
|
433
|
+
/>
|
|
391
434
|
</div>
|
|
392
435
|
</template>
|
|
393
436
|
</FmSideSheet>
|
|
@@ -396,21 +439,29 @@ function initializeMenuState(items: any[]) {
|
|
|
396
439
|
<div class="font-semibold mb-3">{{ t('order.selectTable') }}</div>
|
|
397
440
|
<FmButton variant="plain" :label="tableSelected" size="lg" @click="toggleSideSheetTable" />
|
|
398
441
|
</div>
|
|
399
|
-
<FmSideSheet
|
|
442
|
+
<FmSideSheet
|
|
443
|
+
:header="t('order.selectTable')"
|
|
444
|
+
:maxWidth="600"
|
|
445
|
+
dismiss-away
|
|
446
|
+
v-model="sideSheetTable"
|
|
447
|
+
>
|
|
400
448
|
<div class="text-fm-color-typo-secondary mt-5 mb-5 flex flex-row">
|
|
401
|
-
{{ props.modelValue.condition.tables?.length ?? props.tables.length }}
|
|
402
|
-
|
|
449
|
+
{{ props.modelValue.condition.tables?.length ?? props.tables.length }}
|
|
450
|
+
{{ t('order.tableSelected') }}
|
|
451
|
+
<FmSearch
|
|
452
|
+
v-model:model-value="searchValueTable"
|
|
453
|
+
class="ml-auto"
|
|
454
|
+
:placeholder="t('order.search')"
|
|
455
|
+
/>
|
|
403
456
|
</div>
|
|
404
457
|
|
|
405
458
|
<FmCard variant="outlined" class="p-5">
|
|
406
459
|
<div class="flex flex-row">
|
|
407
460
|
<FmCheckbox
|
|
408
|
-
|
|
409
|
-
:model-value="
|
|
461
|
+
value=""
|
|
462
|
+
:model-value="!tableValue"
|
|
410
463
|
:label="t('order.all')"
|
|
411
|
-
:indeterminate="
|
|
412
|
-
nestedValTable.length > 0 && nestedValTable.length < checkboxChildrenTable.length
|
|
413
|
-
"
|
|
464
|
+
:indeterminate="!!tableValue && tableValue.length > 0"
|
|
414
465
|
@update:model-value="handleParentUpdateTable"
|
|
415
466
|
/>
|
|
416
467
|
<FmButton
|
|
@@ -436,10 +487,10 @@ function initializeMenuState(items: any[]) {
|
|
|
436
487
|
v-if="showTable"
|
|
437
488
|
>
|
|
438
489
|
<FmCheckbox
|
|
439
|
-
:model-value="
|
|
490
|
+
:model-value="selectedTables[item.name].isSelected"
|
|
440
491
|
:label="item.name"
|
|
441
|
-
|
|
442
|
-
@update:model-value="handleChildUpdateTable"
|
|
492
|
+
value=""
|
|
493
|
+
@update:model-value="(v: boolean) => handleChildUpdateTable(v, item.name)"
|
|
443
494
|
/>
|
|
444
495
|
</div>
|
|
445
496
|
</div>
|
|
@@ -447,7 +498,12 @@ function initializeMenuState(items: any[]) {
|
|
|
447
498
|
<template #side-sheet-footer>
|
|
448
499
|
<div class="flex gap-8 items-center justify-start">
|
|
449
500
|
<FmButton variant="primary" :label="t('order.confirm')" size="lg" @click="updateTable" />
|
|
450
|
-
<FmButton
|
|
501
|
+
<FmButton
|
|
502
|
+
variant="secondary"
|
|
503
|
+
:label="t('order.cancel')"
|
|
504
|
+
size="lg"
|
|
505
|
+
@click="sideSheetTable = false"
|
|
506
|
+
/>
|
|
451
507
|
</div>
|
|
452
508
|
</template>
|
|
453
509
|
</FmSideSheet>
|