@feedmepos/mf-order-setting 0.0.91 → 0.0.92
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/{DisplaySystemView-n7Kqdw-h.js → DisplaySystemView-DZS7EVfk.js} +1 -1
- package/dist/{KioskDevicesView-Bz6seroM.js → KioskDevicesView-d2WLB0-w.js} +1 -1
- package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-I39sE8Pe.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-rs-hNWUW.js} +3 -3
- package/dist/{KioskSettingView-Cajjh4Zm.js → KioskSettingView-DFE3_u5c.js} +3 -3
- package/dist/{KioskView-BPSbsMi5.js → KioskView-C3Pi3lWW.js} +5 -5
- package/dist/{OrderSettingsView-jPxZ3JDM.js → OrderSettingsView-Dxg9RjSd.js} +26999 -25299
- package/dist/{app-DIhv5ssA.js → app-BFlQtcsd.js} +3253 -3062
- package/dist/app.js +1 -1
- package/dist/common/order-platform/index.d.ts +20 -0
- package/dist/frontend/mf-order/src/api/reservation/index.d.ts +8 -0
- package/dist/frontend/mf-order/src/app.d.ts +84 -0
- package/dist/frontend/mf-order/src/main.d.ts +84 -0
- package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +3 -3
- package/dist/frontend/mf-order/src/stores/restaurant/index.d.ts +3 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/CopySettingsSheet.vue.d.ts +186 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/CustomTimePicker.vue.d.ts +11 -0
- package/dist/frontend/mf-order/src/views/order-settings/reservation/ReservationSetting.vue.d.ts +2 -0
- package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{index-vaSLX6r3.js → index-ByiTrmdq.js} +2 -2
- package/dist/{index-Clp_YRJ2.js → index-CaO7aaaT.js} +1 -1
- package/dist/{index-CmqNrkNl.js → index-s2kWGMtz.js} +1 -1
- package/dist/order.dto-C829lA69.js +41528 -0
- package/dist/package/entity/delivery/delivery.dto.d.ts +7 -0
- package/dist/package/entity/food-court/food-court.dto.d.ts +315 -264
- package/dist/package/entity/food-court/order-v2.do.d.ts +231 -0
- package/dist/package/entity/food-court/order-v2.do.spec.d.ts +1 -0
- package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +15 -6
- package/dist/package/entity/index.d.ts +7 -0
- package/dist/package/entity/index.frontend.d.ts +2 -0
- package/dist/package/entity/member/member.dto.d.ts +2 -2
- package/dist/package/entity/order/dine-in/dine-in.do.d.ts +44 -9
- package/dist/package/entity/order/dine-in/dine-in.dto.d.ts +17 -3
- package/dist/package/entity/order/menu/menu.dto.d.ts +33 -3
- package/dist/package/entity/order/order-item/order-item.dto.d.ts +18 -18
- package/dist/package/entity/order/order.do.d.ts +87 -12
- package/dist/package/entity/order/order.dto.d.ts +762 -358
- package/dist/package/entity/order/order.enum.d.ts +1 -1
- package/dist/package/entity/order-platform/foodpanda/foodpanda-order.dto.d.ts +7 -0
- package/dist/package/entity/order-platform/grabfood/grabfood-order.do.d.ts +7 -0
- package/dist/package/entity/order-platform/menu.dto.d.ts +10 -10
- package/dist/package/entity/order-platform/order-platform.dto.d.ts +92 -0
- package/dist/package/entity/order-platform/shopeefood/shopeefood-order.do.d.ts +7 -0
- package/dist/package/entity/order-platform/tng/tng-menu.do.d.ts +6 -6
- package/dist/package/entity/order-setting/order-setting.do.d.ts +866 -5
- package/dist/package/entity/order-setting/order-setting.dto.d.ts +10 -10
- package/dist/package/entity/order-setting/reservationV2/reservation.do.d.ts +1269 -0
- package/dist/package/entity/order-setting/sms/sms.do.d.ts +3 -3
- package/dist/package/entity/order-setting/sms/sms.dto.d.ts +3 -3
- package/dist/package/entity/queue/queue.dto.d.ts +175 -121
- package/dist/package/entity/reservation/reservation-pos.do.d.ts +222 -0
- package/dist/package/entity/reservation/reservation.do.d.ts +205 -0
- package/dist/package/entity/reservation/reservation.dto.d.ts +428 -0
- package/dist/package/entity/reservation/reservation.enum.d.ts +3 -0
- package/dist/package/entity/reservation/reservation.utils.d.ts +152 -0
- package/dist/package/entity/restaurant/restaurant.dto.d.ts +39 -24
- package/dist/package/entity/user/user.do.d.ts +2 -2
- package/dist/package/entity/websocket/websocket.dto.d.ts +161 -21
- package/dist/package/entity/websocket/websocket.enum.d.ts +1 -1
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/api/reservation/index.ts +25 -0
- package/src/assets/images/not-found.png +0 -0
- package/src/locales/en-US.json +21 -0
- package/src/locales/ja-JP.json +21 -0
- package/src/locales/th-TH.json +21 -0
- package/src/locales/zh-CN.json +21 -0
- package/src/views/order-settings/OrderSettingsView.vue +9 -2
- package/src/views/order-settings/delivery/delivery.spec.ts +21 -0
- package/src/views/order-settings/delivery/delivery.ts +2 -51
- package/src/views/order-settings/dine-in/DineInSetting.vue +11 -1
- package/src/views/order-settings/reservation/CopySettingsSheet.vue +256 -0
- package/src/views/order-settings/reservation/CustomTimePicker.vue +311 -0
- package/src/views/order-settings/reservation/ReservationSetting.vue +1549 -0
- package/vitest.config.ts +2 -1
- package/dist/order.dto-DV1qL3Q_.js +0 -40301
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.integration-details[data-v-64de12e4]{display:flex;flex-direction:column;gap:.625rem;padding:1rem;margin-top:1rem;border:1px solid #e5e7eb;border-radius:.5rem}.integration-details--owned[data-v-64de12e4]{border-color:var(--fm-color-primary-oats);box-shadow:inset .25rem 0 0 var(--fm-color-primary)}.integration-details__header[data-v-64de12e4]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem}.integration-details__title[data-v-64de12e4]{display:flex;align-items:center;gap:.375rem}.integration-details__store-label[data-v-64de12e4]{padding:.25rem .625rem;color:var(--fm-color-primary);background:var(--fm-color-primary-oats);border-radius:999px}.integration-details__row[data-v-64de12e4]{display:grid;grid-template-columns:10rem minmax(0,1fr);align-items:center;gap:1rem}.integration-details__value[data-v-64de12e4]{display:flex;min-width:0;align-items:center;gap:.5rem}.integration-details__action[data-v-64de12e4]{display:inline-flex;flex:0 0 auto}.integration-details__value>code[data-v-64de12e4]{flex:1 1 auto}.integration-details__summary[data-v-64de12e4]{display:flex;justify-content:flex-end;margin-top:.25rem}.integration-details__message[data-v-64de12e4]{max-height:9rem;overflow-y:auto;white-space:pre-wrap}code[data-v-64de12e4]{min-width:0;overflow-wrap:anywhere}@media (max-width: 460px){.integration-details__row[data-v-64de12e4]{grid-template-columns:1fr;gap:.25rem}.integration-details__header[data-v-64de12e4]{align-items:flex-start}}.store-section[data-v-64f1ea7c]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-64f1ea7c]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-64f1ea7c]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.store-card__title[data-v-64f1ea7c]{min-width:0;word-break:break-all}.store-card__actions[data-v-64f1ea7c]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-64f1ea7c]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-64f1ea7c]{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:1rem}.store-field>span[data-v-64f1ea7c]:first-child{color:var(--fm-color-neutral-gray-400)}.store-field>span[data-v-64f1ea7c]:last-child{word-break:break-word}.store-sheet-body[data-v-64f1ea7c]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}@media (max-width: 460px){.store-field[data-v-64f1ea7c]{grid-template-columns:1fr}}.store-section[data-v-fe141f25]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-fe141f25]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-fe141f25]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.store-card__title[data-v-fe141f25]{min-width:0;word-break:break-all}.store-card__actions[data-v-fe141f25]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-fe141f25]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-fe141f25]{display:grid;grid-template-columns:9rem minmax(0,1fr);align-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:.125rem}.store-field>span[data-v-fe141f25]:last-child{word-break:break-word}.store-sheet-body[data-v-fe141f25]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}.store-sheet-activate[data-v-fe141f25]{padding-top:1.25rem;border-top:1px solid #e5e7eb}.store-sheet-activate__hint[data-v-fe141f25]{margin-top:.5rem}@media (max-width: 460px){.store-field[data-v-fe141f25]{grid-template-columns:1fr}}.store-section[data-v-b94bbdb0]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-b94bbdb0]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-b94bbdb0]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.store-card__title[data-v-b94bbdb0]{min-width:0;word-break:break-all}.store-card__actions[data-v-b94bbdb0]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-b94bbdb0]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-b94bbdb0]{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:1rem}.store-field>span[data-v-b94bbdb0]:first-child{color:var(--fm-color-neutral-gray-400)}.store-field>span[data-v-b94bbdb0]:last-child{word-break:break-word}.store-sheet-body[data-v-b94bbdb0]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}@media (max-width: 460px){.store-field[data-v-b94bbdb0]{grid-template-columns:1fr}}[data-v-91393c58] .fm-checkbox--wrapper:has(input:disabled){pointer-events:none}[data-v-a959025e] .flex.flex-col.gap-8>:first-child,[data-v-a959025e] .flex.flex-col.gap-8>:last-child{display:none}.toggle[data-v-5266c20e]{position:relative;flex-shrink:0;width:52px;height:32px;padding:0;border:none;border-radius:9999px;background:var(--fm-color-neutral-gray-200);cursor:pointer;transition:background-color .2s ease-out}.toggle[data-v-5266c20e]:focus{outline:none}.toggle[data-v-5266c20e]:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--fm-color-primary) 40%,transparent)}.toggle--on[data-v-5266c20e]{background:var(--fm-color-primary)}.toggle__thumb[data-v-5266c20e]{position:absolute;top:50%;left:8px;width:18px;height:18px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #0003;transform:translateY(-50%);transition:all .2s ease-out}.toggle--on .toggle__thumb[data-v-5266c20e]{left:24px;width:24px;height:24px}.toggle:active .toggle__thumb[data-v-5266c20e]{transform:translateY(-50%) scale(1.1)}.delivery-company-filter-toolbar[data-v-e2763a83]{display:flex;flex-direction:row;justify-content:space-between}@media (max-width: 647px){.delivery-company-filter-toolbar[data-v-e2763a83]{flex-direction:column;flex-wrap:wrap}}.preview-frame[data-v-bd8d2976]{position:relative;width:100%;overflow:hidden;border:1px solid #d1d5db;border-radius:12px;aspect-ratio:16 / 9;background:#111827;box-shadow:0 16px 40px #0f172a1f}.preview-iframe[data-v-bd8d2976]{display:block;width:100%;height:100%;border:0;background:#f3f4f6}.preview-status[data-v-bd8d2976]{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;gap:12px;background:#f9fafbf0;color:#4b5563;text-align:center;font-size:13px}.preview-status p[data-v-bd8d2976]{margin:0}.preview-status[data-v-bd8d2976] button{justify-self:center}.preview-loading[data-v-bd8d2976]{display:grid;justify-items:center;gap:10px}.preview-loading span[data-v-bd8d2976]{width:24px;height:24px;border:3px solid #fed7aa;border-top-color:#ef661f;border-radius:50%;animation:preview-spin-bd8d2976 .8s linear infinite}@keyframes preview-spin-bd8d2976{to{transform:rotate(360deg)}}.canvas-area[data-v-cdd742c6]{position:relative;display:flex;min-width:0;min-height:0;flex-direction:column}.canvas-area-card[data-v-cdd742c6]{display:flex;flex:1;min-width:0;min-height:0;flex-direction:column;gap:8px;overflow:visible;border:1.5px dashed rgb(255 255 255 / 55%);border-radius:10px;padding:6px;background:#11182752;text-align:left}.canvas-area-card[data-v-cdd742c6]:hover{background:#1118276b}.canvas-area-active[data-v-cdd742c6]{border-style:solid;border-color:#f97316;background:#f973164d;box-shadow:0 0 0 3px #f973161f}.canvas-area-context[data-v-cdd742c6]{border-style:solid;border-color:#fed7aa;background:#fdba7433}.canvas-area-droppable[data-v-cdd742c6]{border-color:#f97316;background:#f973165c}.canvas-area-drop-over[data-v-cdd742c6]{border-style:solid;box-shadow:0 0 0 3px #f9731633}.canvas-area-head[data-v-cdd742c6]{display:flex;align-items:center;gap:8px}.canvas-area-name[data-v-cdd742c6],.canvas-area-share[data-v-cdd742c6]{color:#f9fafb;text-shadow:0 1px 3px rgb(0 0 0 / 70%);font-weight:700}.canvas-area-name[data-v-cdd742c6]{font-size:10px;letter-spacing:.06em;text-transform:uppercase}.canvas-area-share[data-v-cdd742c6]{margin-left:auto;font-size:12px;font-variant-numeric:tabular-nums}.canvas-area-remove[data-v-cdd742c6]{display:grid;flex:0 0 auto;place-items:center;border-radius:999px;padding:2px;background:#1118278c;color:#f9fafb;opacity:0;transition:opacity .1s ease}.canvas-area-remove[data-v-cdd742c6]:hover{background:#fef2f2;color:#dc2626}.canvas-edge[data-v-cdd742c6]{position:absolute;display:grid;place-items:center;width:20px;height:20px;border-radius:999px;background:#fff;box-shadow:0 0 0 1.5px #d1d5db;color:#9ca3af;opacity:0;transition:opacity .1s ease;z-index:1}.canvas-area:hover .canvas-edge[data-v-cdd742c6],.canvas-area:focus-within .canvas-edge[data-v-cdd742c6],.canvas-area:hover .canvas-area-remove[data-v-cdd742c6],.canvas-area:focus-within .canvas-area-remove[data-v-cdd742c6]{opacity:1}.canvas-edge[data-v-cdd742c6]:hover{box-shadow:0 0 0 1.5px #f97316;color:#f97316}.canvas-edge-right[data-v-cdd742c6]{top:50%;right:-10px;transform:translateY(-50%)}.canvas-edge-bottom[data-v-cdd742c6]{bottom:-10px;left:50%;transform:translate(-50%)}.canvas-chips[data-v-cdd742c6]{display:flex;min-height:0;flex:1;flex-direction:column}.canvas-chip[data-v-cdd742c6]{display:flex;align-items:center;align-self:flex-start;max-width:100%;gap:6px;border:1px solid #e5e7eb;border-radius:8px;padding:6px 8px;background:#ffffffeb;color:#374151;font-size:12px;text-align:left;cursor:grab}.canvas-chip[data-v-cdd742c6]:hover{border-color:#fdba74}.canvas-chip-active[data-v-cdd742c6]{border-color:#f97316;box-shadow:inset 4px 0 #f97316,0 0 0 3px #f973161f;font-weight:600}.canvas-chip-active .canvas-chip-grip[data-v-cdd742c6]{color:#f97316}.canvas-chip-context[data-v-cdd742c6]{border-color:#fed7aa;background:#fffdfa}.canvas-chip[data-v-cdd742c6]:active{cursor:grabbing}.canvas-chip-grip[data-v-cdd742c6]{flex:0 0 auto;color:#9ca3af}.canvas-chip-label[data-v-cdd742c6]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-chip-swap[data-v-cdd742c6]{display:grid;flex:0 0 auto;place-items:center;margin-left:2px;border-radius:6px;padding:2px;color:#9ca3af;opacity:0;transition:opacity .1s ease}.canvas-chip:hover .canvas-chip-swap[data-v-cdd742c6],.canvas-chip:focus-within .canvas-chip-swap[data-v-cdd742c6]{opacity:1}.canvas-chip-swap[data-v-cdd742c6]:hover{background:#fff;color:#f97316}.canvas-area-empty[data-v-cdd742c6]{display:grid;flex:1;place-items:center;border:1px dashed rgb(255 255 255 / 60%);border-radius:8px;background:transparent;color:#f3f4f6;font-size:11px;font-family:inherit;cursor:pointer}.canvas-area-empty[data-v-cdd742c6]:hover{border-color:#f97316;color:#f97316}@media (hover: none),(pointer: coarse){.canvas-edge[data-v-cdd742c6],.canvas-area-remove[data-v-cdd742c6],.canvas-chip-swap[data-v-cdd742c6]{opacity:1}}.canvas[data-v-eb790981]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;min-height:0}.canvas-row[data-v-eb790981]{flex-direction:row}.canvas-column[data-v-eb790981]{flex-direction:column}.canvas-group[data-v-eb790981]{position:relative;display:flex;min-width:0;min-height:0}.canvas-divider[data-v-eb790981]{position:absolute;z-index:2;display:grid;place-items:center;touch-action:none}.divider-vertical[data-v-eb790981]{top:0;bottom:0;width:10px;transform:translate(-50%);cursor:col-resize}.divider-horizontal[data-v-eb790981]{left:0;right:0;height:10px;transform:translateY(-50%);cursor:row-resize}.canvas-divider-grip[data-v-eb790981]{border-radius:999px;background:#d1d5db}.divider-vertical .canvas-divider-grip[data-v-eb790981]{height:34px;width:3px}.divider-horizontal .canvas-divider-grip[data-v-eb790981]{height:3px;width:34px}.canvas-divider:hover .canvas-divider-grip[data-v-eb790981]{background:#f97316}.module-picker[data-v-2892f182]{display:flex;flex-direction:column;gap:18px}.module-picker-hint[data-v-2892f182]{margin:0;color:#6b7280;font-size:12px}.module-picker-group[data-v-2892f182]{display:flex;flex-direction:column;gap:8px}.module-picker-group-label[data-v-2892f182]{margin:0;color:#9ca3af;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.module-picker-grid[data-v-2892f182]{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.module-picker-card[data-v-2892f182]{display:flex;flex-direction:column;align-items:center;gap:8px;border:1px solid #e5e7eb;border-radius:10px;padding:14px 10px;background:#fff;color:#374151;font-size:13px;text-align:center;cursor:pointer}.module-picker-card[data-v-2892f182]:hover{border-color:#f97316;background:#fffbf5}.module-picker-icon[data-v-2892f182]{display:grid;height:36px;width:36px;place-items:center;border-radius:8px;background:#f3f4f6;color:#4b5563}.module-picker-label[data-v-2892f182]{line-height:1.3;overflow-wrap:anywhere}.media-field[data-v-839ff846]{display:flex;flex-direction:column;gap:6px}.media-label[data-v-839ff846]{color:#4b5563;font-size:12px}.media-thumb[data-v-839ff846]{height:72px;width:100%;border-radius:8px;border:1px solid #e5e7eb;-o-object-fit:cover;object-fit:cover}.media-empty[data-v-839ff846]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#9ca3af;font-size:12px}.media-warning[data-v-839ff846]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#b54708;font-size:12px}.media-actions[data-v-839ff846]{display:flex;gap:6px}.inspector[data-v-4cc442cf]{display:flex;flex-direction:column;gap:14px}.inspector-scope[data-v-4cc442cf]{align-self:stretch}.inspector-breadcrumb[data-v-4cc442cf]{display:flex;align-items:center;gap:2px;color:#6b7280;font-size:11px}.inspector-section[data-v-4cc442cf]{display:flex;flex-direction:column;gap:10px;border-top:1px solid #e5e7eb;padding-top:12px}.inspector-section-title[data-v-4cc442cf]{color:#9ca3af;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.inspector-note[data-v-4cc442cf]{color:#6b7280;font-size:11px;line-height:1.45}.inspector-warning[data-v-4cc442cf]{display:flex;align-items:flex-start;gap:6px;border-radius:8px;background:#fffbeb;padding:8px 10px;color:#92400e;font-size:12px}.inspector-list[data-v-4cc442cf]{display:flex;flex-direction:column;gap:8px}.inspector-list-head[data-v-4cc442cf]{display:flex;align-items:baseline;gap:6px}.inspector-list-count[data-v-4cc442cf]{border-radius:999px;background:#f3f4f6;padding:0 6px;color:#6b7280;font-size:10px;font-variant-numeric:tabular-nums}.inspector-item[data-v-4cc442cf]{display:flex;flex-direction:column;gap:10px;border:1px solid #e5e7eb;border-radius:10px;padding:10px;background:#fcfcfd}.inspector-item-head[data-v-4cc442cf]{display:flex;align-items:center;gap:2px}.inspector-item-name[data-v-4cc442cf]{flex:1;color:#6b7280;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.inspector-item-action[data-v-4cc442cf]{display:grid;flex:0 0 auto;place-items:center;border-radius:6px;padding:2px;color:#9ca3af}.inspector-item-action[data-v-4cc442cf]:hover:not(:disabled){background:#fff7ed;color:#f97316}.inspector-item-action[data-v-4cc442cf]:disabled{opacity:.35}.inspector-list-add[data-v-4cc442cf]{display:flex;gap:6px}.media-field[data-v-4cc442cf]{display:flex;flex-direction:column;gap:6px}.media-label[data-v-4cc442cf]{color:#4b5563;font-size:12px}.media-thumb[data-v-4cc442cf]{height:72px;width:100%;border-radius:8px;border:1px solid #e5e7eb;-o-object-fit:cover;object-fit:cover}.media-empty[data-v-4cc442cf]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#9ca3af;font-size:12px}.media-actions[data-v-4cc442cf]{display:flex;gap:6px}.editor-head[data-v-a673333e]{display:flex;shrink:0;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #e5e7eb;padding:12px 20px}.editor-identity[data-v-a673333e]{display:flex;min-width:0;align-items:center;gap:10px}.editor-name[data-v-a673333e]{width:min(320px,40vw)}.editor-orientation[data-v-a673333e]{width:160px}.editor-error[data-v-a673333e]{flex-shrink:0;margin:12px 16px 0;border-radius:8px;background:#fef2f2;padding:8px 12px;color:#b91c1c;font-size:13px}.rail-scale[data-v-a673333e]{display:flex;flex-direction:column;gap:6px;margin-bottom:18px;border-bottom:1px solid #e5e7eb;padding-bottom:16px}.rail-scale-label[data-v-a673333e]{color:#4b5563;font-size:12px;font-weight:600}.rail-scale-hint[data-v-a673333e]{margin:0;color:#6b7280;font-size:11px;line-height:1.4}.rail-scale-warning[data-v-a673333e]{margin:0;border-radius:8px;padding:6px 8px;color:#9a3412;background:#fff7ed;font-size:11px;line-height:1.4}.editor-body[data-v-a673333e]{display:grid;min-height:0;flex:1;grid-template-columns:268px minmax(0,1fr) 320px}.editor-rail[data-v-a673333e],.editor-inspector[data-v-a673333e]{min-height:0;overflow:auto;padding:16px}.editor-rail[data-v-a673333e]{border-right:1px solid #e5e7eb;background:#f9fafb}.editor-inspector[data-v-a673333e]{border-left:1px solid #e5e7eb;background:#f9fafb}.editor-stage[data-v-a673333e]{display:flex;min-height:0;flex-direction:column;gap:12px;overflow:auto;padding:16px}.stage-preview[data-v-a673333e]{display:flex;min-height:0;flex:1;align-items:center;justify-content:center}.preview-box[data-v-a673333e]{position:relative;margin:0 auto}.preview-box.preview-landscape[data-v-a673333e]{width:100%;max-height:72vh;aspect-ratio:16 / 9}.preview-box.preview-portrait[data-v-a673333e]{height:72vh;max-width:100%;aspect-ratio:9 / 16}.preview-frame[data-v-a673333e]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;border:1px solid #e5e7eb;border-radius:12px;background:#101828}.preview-frame[data-v-a673333e]>*{width:100%;height:100%}.preview-edit-overlay[data-v-a673333e]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;transition:opacity .15s ease}.preview-box:hover .preview-edit-overlay[data-v-a673333e],.preview-box:focus-within .preview-edit-overlay[data-v-a673333e],.preview-edit-overlay.preview-edit-overlay-active[data-v-a673333e]{opacity:1;pointer-events:auto}@media (hover: none),(pointer: coarse){.preview-edit-overlay[data-v-a673333e]{opacity:1;pointer-events:auto}}.layout-bar[data-v-a673333e]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.layout-bar-title[data-v-a673333e]{display:flex;min-width:0;flex-direction:column;gap:2px}.layout-title[data-v-a673333e]{color:#111827;font-size:13px;font-weight:600}.layout-hint[data-v-a673333e]{color:#9ca3af;font-size:11px}.layout-actions[data-v-a673333e]{display:flex;flex-shrink:0;align-items:center;gap:6px}.layout-conflict[data-v-a673333e]{display:flex;align-items:flex-start;gap:6px;border-radius:8px;background:#fffbeb;padding:8px 10px;color:#92400e;font-size:12px;cursor:pointer}.preset-row[data-v-a673333e]{display:flex;flex-wrap:wrap;gap:8px;border-radius:10px;background:#f9fafb;padding:10px}.preset-card[data-v-a673333e]{display:flex;width:108px;flex-direction:column;gap:6px;border:1px solid #d1d5db;border-radius:10px;padding:8px;background:#fff;text-align:left}.preset-card[data-v-a673333e]:hover{border-color:#f97316;background:#fff7ed}.preset-diagram[data-v-a673333e]{display:flex;height:34px;gap:3px;border-radius:6px;background:#f3f4f6;padding:3px}.preset-row-dir[data-v-a673333e]{flex-direction:row}.preset-column-dir[data-v-a673333e]{flex-direction:column}.preset-cell[data-v-a673333e]{flex-basis:0;border-radius:4px;background:#fdba74}.preset-label[data-v-a673333e]{color:#374151;font-size:11px;line-height:1.3}@media (max-width: 1280px){.editor-body[data-v-a673333e]{grid-template-columns:220px minmax(0,1fr)}.editor-inspector[data-v-a673333e]{grid-column:1 / -1;border-left:0;border-top:1px solid #e5e7eb}}.layout-split[data-v-5595b416]{display:flex;min-width:0;min-height:0;flex:1;gap:6px}.layout-row[data-v-5595b416]{flex-direction:row}.layout-column[data-v-5595b416]{flex-direction:column}.layout-zone[data-v-5595b416]{display:flex;min-width:0;min-height:36px;flex:1;flex-direction:row;align-items:center;gap:8px;overflow:hidden;border:1.5px dashed #d1d5db;border-radius:10px;padding:6px 10px;background:#fff;text-align:left;transition:border-color .12s ease,background .12s ease}.layout-zone[data-v-5595b416]:hover{border-color:#fdba74;background:#fffbf5}.layout-zone-selected[data-v-5595b416]{border-style:solid;border-color:#f97316;background:#fff7ed;box-shadow:inset 0 0 0 1px #f97316}.layout-zone-index[data-v-5595b416]{flex:none;color:#6b7280;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.layout-zone-blocks[data-v-5595b416]{display:flex;min-width:0;gap:4px}.layout-zone-chip[data-v-5595b416]{display:inline-flex;max-width:100%;align-items:center;gap:4px;border-radius:999px;background:#f3f4f6;padding:3px 8px;color:#374151;font-size:11px}.display-toolbar[data-v-a2dda95a]{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #e5e7eb;padding-bottom:14px}.display-controls[data-v-a2dda95a]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:12px}.display-restaurant-select[data-v-a2dda95a]{width:min(360px,100%)}.display-outlet[data-v-a2dda95a]{display:flex;align-items:center;gap:16px}.display-entitlement[data-v-a2dda95a]{color:#6b7280;font-size:12px;white-space:nowrap}.restriction-note[data-v-a2dda95a]{margin-top:12px;border:1px solid #fed7aa;border-radius:10px;padding:10px 12px;color:#9a3412;background:#fff7ed;font-size:13px}.empty-state[data-v-a2dda95a]{display:grid;justify-items:center;gap:6px;border:1px dashed #d1d5db;border-radius:12px;padding:56px 20px;color:#6b7280;text-align:center}.empty-state strong[data-v-a2dda95a]{color:#111827}.layout-thumb[data-v-a2dda95a]{display:flex;height:auto;min-height:96px;margin-top:16px;border-radius:10px;background:#f3f4f6;padding:5px;pointer-events:none}.thumb-caption[data-v-a2dda95a]{margin-top:8px;color:#6b7280;font-size:11px}.resource-card[data-v-a2dda95a]{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff;box-shadow:0 2px 8px #0000000a}.mode-badge[data-v-a2dda95a],.status-badge[data-v-a2dda95a]{border-radius:999px;padding:3px 8px;background:#f3f4f6;font-size:11px;font-weight:700}.status-badge.active[data-v-a2dda95a]{color:#166534;background:#dcfce7}.status-badge.disabled[data-v-a2dda95a]{color:#991b1b;background:#fee2e2}.status-badge.unlicensed[data-v-a2dda95a]{color:#b42318;background:#fef3f2;border:1px solid #fecdca}.online-dot[data-v-a2dda95a]{color:#6b7280;font-size:11px}.online-dot[data-v-a2dda95a]:before{display:inline-block;width:7px;height:7px;margin-right:5px;border-radius:50%;background:#9ca3af;content:""}.online-dot.online[data-v-a2dda95a]{color:#15803d}.online-dot.online[data-v-a2dda95a]:before{background:#22c55e}.meta-grid[data-v-a2dda95a]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:18px;border-top:1px solid #f0f0f0;padding-top:16px}.meta-grid dt[data-v-a2dda95a]{color:#6b7280;font-size:11px}.meta-grid dd[data-v-a2dda95a]{overflow:hidden;margin-top:2px;font-size:12px;text-overflow:ellipsis;white-space:nowrap}@media (max-width:640px){.display-toolbar[data-v-a2dda95a]{align-items:flex-start}.display-controls[data-v-a2dda95a]{align-items:stretch;flex-direction:column}.display-outlet[data-v-a2dda95a]{align-items:stretch;flex-direction:column;gap:8px}.display-restaurant-select[data-v-a2dda95a]{width:100%}}
|
|
1
|
+
.integration-details[data-v-64de12e4]{display:flex;flex-direction:column;gap:.625rem;padding:1rem;margin-top:1rem;border:1px solid #e5e7eb;border-radius:.5rem}.integration-details--owned[data-v-64de12e4]{border-color:var(--fm-color-primary-oats);box-shadow:inset .25rem 0 0 var(--fm-color-primary)}.integration-details__header[data-v-64de12e4]{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem}.integration-details__title[data-v-64de12e4]{display:flex;align-items:center;gap:.375rem}.integration-details__store-label[data-v-64de12e4]{padding:.25rem .625rem;color:var(--fm-color-primary);background:var(--fm-color-primary-oats);border-radius:999px}.integration-details__row[data-v-64de12e4]{display:grid;grid-template-columns:10rem minmax(0,1fr);align-items:center;gap:1rem}.integration-details__value[data-v-64de12e4]{display:flex;min-width:0;align-items:center;gap:.5rem}.integration-details__action[data-v-64de12e4]{display:inline-flex;flex:0 0 auto}.integration-details__value>code[data-v-64de12e4]{flex:1 1 auto}.integration-details__summary[data-v-64de12e4]{display:flex;justify-content:flex-end;margin-top:.25rem}.integration-details__message[data-v-64de12e4]{max-height:9rem;overflow-y:auto;white-space:pre-wrap}code[data-v-64de12e4]{min-width:0;overflow-wrap:anywhere}@media (max-width: 460px){.integration-details__row[data-v-64de12e4]{grid-template-columns:1fr;gap:.25rem}.integration-details__header[data-v-64de12e4]{align-items:flex-start}}.store-section[data-v-64f1ea7c]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-64f1ea7c]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-64f1ea7c]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.store-card__title[data-v-64f1ea7c]{min-width:0;word-break:break-all}.store-card__actions[data-v-64f1ea7c]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-64f1ea7c]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-64f1ea7c]{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:1rem}.store-field>span[data-v-64f1ea7c]:first-child{color:var(--fm-color-neutral-gray-400)}.store-field>span[data-v-64f1ea7c]:last-child{word-break:break-word}.store-sheet-body[data-v-64f1ea7c]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}@media (max-width: 460px){.store-field[data-v-64f1ea7c]{grid-template-columns:1fr}}.store-section[data-v-fe141f25]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-fe141f25]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-fe141f25]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.store-card__title[data-v-fe141f25]{min-width:0;word-break:break-all}.store-card__actions[data-v-fe141f25]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-fe141f25]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-fe141f25]{display:grid;grid-template-columns:9rem minmax(0,1fr);align-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:.125rem}.store-field>span[data-v-fe141f25]:last-child{word-break:break-word}.store-sheet-body[data-v-fe141f25]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}.store-sheet-activate[data-v-fe141f25]{padding-top:1.25rem;border-top:1px solid #e5e7eb}.store-sheet-activate__hint[data-v-fe141f25]{margin-top:.5rem}@media (max-width: 460px){.store-field[data-v-fe141f25]{grid-template-columns:1fr}}.store-section[data-v-b94bbdb0]{border-top:1px solid #e5e7eb;padding-top:1.5rem}.store-card[data-v-b94bbdb0]{padding:1.25rem;margin-bottom:1rem}.store-card__top[data-v-b94bbdb0]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.store-card__title[data-v-b94bbdb0]{min-width:0;word-break:break-all}.store-card__actions[data-v-b94bbdb0]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem;flex-shrink:0}.store-card__fields[data-v-b94bbdb0]{display:flex;flex-direction:column;gap:.625rem}.store-field[data-v-b94bbdb0]{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:1rem}.store-field>span[data-v-b94bbdb0]:first-child{color:var(--fm-color-neutral-gray-400)}.store-field>span[data-v-b94bbdb0]:last-child{word-break:break-word}.store-sheet-body[data-v-b94bbdb0]{display:flex;flex-direction:column;gap:1rem;padding-top:.5rem}@media (max-width: 460px){.store-field[data-v-b94bbdb0]{grid-template-columns:1fr}}[data-v-91393c58] .fm-checkbox--wrapper:has(input:disabled){pointer-events:none}[data-v-a959025e] .flex.flex-col.gap-8>:first-child,[data-v-a959025e] .flex.flex-col.gap-8>:last-child{display:none}.toggle[data-v-5266c20e]{position:relative;flex-shrink:0;width:52px;height:32px;padding:0;border:none;border-radius:9999px;background:var(--fm-color-neutral-gray-200);cursor:pointer;transition:background-color .2s ease-out}.toggle[data-v-5266c20e]:focus{outline:none}.toggle[data-v-5266c20e]:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--fm-color-primary) 40%,transparent)}.toggle--on[data-v-5266c20e]{background:var(--fm-color-primary)}.toggle__thumb[data-v-5266c20e]{position:absolute;top:50%;left:8px;width:18px;height:18px;border-radius:9999px;background:#fff;box-shadow:0 1px 2px #0003;transform:translateY(-50%);transition:all .2s ease-out}.toggle--on .toggle__thumb[data-v-5266c20e]{left:24px;width:24px;height:24px}.toggle:active .toggle__thumb[data-v-5266c20e]{transform:translateY(-50%) scale(1.1)}.delivery-company-filter-toolbar[data-v-e2763a83]{display:flex;flex-direction:row;justify-content:space-between}@media (max-width: 647px){.delivery-company-filter-toolbar[data-v-e2763a83]{flex-direction:column;flex-wrap:wrap}}.scrollbar-thin[data-v-09464e01]::-webkit-scrollbar{width:6px}.scrollbar-thin[data-v-09464e01]::-webkit-scrollbar-track{background:transparent;border-radius:3px;margin:4px 0}.scrollbar-thin[data-v-09464e01]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.scrollbar-thin[data-v-09464e01]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.time-picker-field[data-v-09464e01]{width:100%;height:40px;border-width:1.5px;border-style:solid;border-color:#d1d5db;border-radius:.625rem;padding:8px 36px 8px 12px;font-size:.95rem;line-height:1.25rem;font-weight:500;transition:all .2s;background-color:#fff;outline:none;box-sizing:border-box}.time-picker-field[data-v-09464e01]:hover{border-color:#9ca3af}.time-picker-field[data-v-09464e01]:focus{border-color:#f97316!important;background-color:#fff7ed!important}.preview-frame[data-v-bd8d2976]{position:relative;width:100%;overflow:hidden;border:1px solid #d1d5db;border-radius:12px;aspect-ratio:16 / 9;background:#111827;box-shadow:0 16px 40px #0f172a1f}.preview-iframe[data-v-bd8d2976]{display:block;width:100%;height:100%;border:0;background:#f3f4f6}.preview-status[data-v-bd8d2976]{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;gap:12px;background:#f9fafbf0;color:#4b5563;text-align:center;font-size:13px}.preview-status p[data-v-bd8d2976]{margin:0}.preview-status[data-v-bd8d2976] button{justify-self:center}.preview-loading[data-v-bd8d2976]{display:grid;justify-items:center;gap:10px}.preview-loading span[data-v-bd8d2976]{width:24px;height:24px;border:3px solid #fed7aa;border-top-color:#ef661f;border-radius:50%;animation:preview-spin-bd8d2976 .8s linear infinite}@keyframes preview-spin-bd8d2976{to{transform:rotate(360deg)}}.canvas-area[data-v-cdd742c6]{position:relative;display:flex;min-width:0;min-height:0;flex-direction:column}.canvas-area-card[data-v-cdd742c6]{display:flex;flex:1;min-width:0;min-height:0;flex-direction:column;gap:8px;overflow:visible;border:1.5px dashed rgb(255 255 255 / 55%);border-radius:10px;padding:6px;background:#11182752;text-align:left}.canvas-area-card[data-v-cdd742c6]:hover{background:#1118276b}.canvas-area-active[data-v-cdd742c6]{border-style:solid;border-color:#f97316;background:#f973164d;box-shadow:0 0 0 3px #f973161f}.canvas-area-context[data-v-cdd742c6]{border-style:solid;border-color:#fed7aa;background:#fdba7433}.canvas-area-droppable[data-v-cdd742c6]{border-color:#f97316;background:#f973165c}.canvas-area-drop-over[data-v-cdd742c6]{border-style:solid;box-shadow:0 0 0 3px #f9731633}.canvas-area-head[data-v-cdd742c6]{display:flex;align-items:center;gap:8px}.canvas-area-name[data-v-cdd742c6],.canvas-area-share[data-v-cdd742c6]{color:#f9fafb;text-shadow:0 1px 3px rgb(0 0 0 / 70%);font-weight:700}.canvas-area-name[data-v-cdd742c6]{font-size:10px;letter-spacing:.06em;text-transform:uppercase}.canvas-area-share[data-v-cdd742c6]{margin-left:auto;font-size:12px;font-variant-numeric:tabular-nums}.canvas-area-remove[data-v-cdd742c6]{display:grid;flex:0 0 auto;place-items:center;border-radius:999px;padding:2px;background:#1118278c;color:#f9fafb;opacity:0;transition:opacity .1s ease}.canvas-area-remove[data-v-cdd742c6]:hover{background:#fef2f2;color:#dc2626}.canvas-edge[data-v-cdd742c6]{position:absolute;display:grid;place-items:center;width:20px;height:20px;border-radius:999px;background:#fff;box-shadow:0 0 0 1.5px #d1d5db;color:#9ca3af;opacity:0;transition:opacity .1s ease;z-index:1}.canvas-area:hover .canvas-edge[data-v-cdd742c6],.canvas-area:focus-within .canvas-edge[data-v-cdd742c6],.canvas-area:hover .canvas-area-remove[data-v-cdd742c6],.canvas-area:focus-within .canvas-area-remove[data-v-cdd742c6]{opacity:1}.canvas-edge[data-v-cdd742c6]:hover{box-shadow:0 0 0 1.5px #f97316;color:#f97316}.canvas-edge-right[data-v-cdd742c6]{top:50%;right:-10px;transform:translateY(-50%)}.canvas-edge-bottom[data-v-cdd742c6]{bottom:-10px;left:50%;transform:translate(-50%)}.canvas-chips[data-v-cdd742c6]{display:flex;min-height:0;flex:1;flex-direction:column}.canvas-chip[data-v-cdd742c6]{display:flex;align-items:center;align-self:flex-start;max-width:100%;gap:6px;border:1px solid #e5e7eb;border-radius:8px;padding:6px 8px;background:#ffffffeb;color:#374151;font-size:12px;text-align:left;cursor:grab}.canvas-chip[data-v-cdd742c6]:hover{border-color:#fdba74}.canvas-chip-active[data-v-cdd742c6]{border-color:#f97316;box-shadow:inset 4px 0 #f97316,0 0 0 3px #f973161f;font-weight:600}.canvas-chip-active .canvas-chip-grip[data-v-cdd742c6]{color:#f97316}.canvas-chip-context[data-v-cdd742c6]{border-color:#fed7aa;background:#fffdfa}.canvas-chip[data-v-cdd742c6]:active{cursor:grabbing}.canvas-chip-grip[data-v-cdd742c6]{flex:0 0 auto;color:#9ca3af}.canvas-chip-label[data-v-cdd742c6]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.canvas-chip-swap[data-v-cdd742c6]{display:grid;flex:0 0 auto;place-items:center;margin-left:2px;border-radius:6px;padding:2px;color:#9ca3af;opacity:0;transition:opacity .1s ease}.canvas-chip:hover .canvas-chip-swap[data-v-cdd742c6],.canvas-chip:focus-within .canvas-chip-swap[data-v-cdd742c6]{opacity:1}.canvas-chip-swap[data-v-cdd742c6]:hover{background:#fff;color:#f97316}.canvas-area-empty[data-v-cdd742c6]{display:grid;flex:1;place-items:center;border:1px dashed rgb(255 255 255 / 60%);border-radius:8px;background:transparent;color:#f3f4f6;font-size:11px;font-family:inherit;cursor:pointer}.canvas-area-empty[data-v-cdd742c6]:hover{border-color:#f97316;color:#f97316}@media (hover: none),(pointer: coarse){.canvas-edge[data-v-cdd742c6],.canvas-area-remove[data-v-cdd742c6],.canvas-chip-swap[data-v-cdd742c6]{opacity:1}}.canvas[data-v-eb790981]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;min-height:0}.canvas-row[data-v-eb790981]{flex-direction:row}.canvas-column[data-v-eb790981]{flex-direction:column}.canvas-group[data-v-eb790981]{position:relative;display:flex;min-width:0;min-height:0}.canvas-divider[data-v-eb790981]{position:absolute;z-index:2;display:grid;place-items:center;touch-action:none}.divider-vertical[data-v-eb790981]{top:0;bottom:0;width:10px;transform:translate(-50%);cursor:col-resize}.divider-horizontal[data-v-eb790981]{left:0;right:0;height:10px;transform:translateY(-50%);cursor:row-resize}.canvas-divider-grip[data-v-eb790981]{border-radius:999px;background:#d1d5db}.divider-vertical .canvas-divider-grip[data-v-eb790981]{height:34px;width:3px}.divider-horizontal .canvas-divider-grip[data-v-eb790981]{height:3px;width:34px}.canvas-divider:hover .canvas-divider-grip[data-v-eb790981]{background:#f97316}.module-picker[data-v-2892f182]{display:flex;flex-direction:column;gap:18px}.module-picker-hint[data-v-2892f182]{margin:0;color:#6b7280;font-size:12px}.module-picker-group[data-v-2892f182]{display:flex;flex-direction:column;gap:8px}.module-picker-group-label[data-v-2892f182]{margin:0;color:#9ca3af;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.module-picker-grid[data-v-2892f182]{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.module-picker-card[data-v-2892f182]{display:flex;flex-direction:column;align-items:center;gap:8px;border:1px solid #e5e7eb;border-radius:10px;padding:14px 10px;background:#fff;color:#374151;font-size:13px;text-align:center;cursor:pointer}.module-picker-card[data-v-2892f182]:hover{border-color:#f97316;background:#fffbf5}.module-picker-icon[data-v-2892f182]{display:grid;height:36px;width:36px;place-items:center;border-radius:8px;background:#f3f4f6;color:#4b5563}.module-picker-label[data-v-2892f182]{line-height:1.3;overflow-wrap:anywhere}.media-field[data-v-839ff846]{display:flex;flex-direction:column;gap:6px}.media-label[data-v-839ff846]{color:#4b5563;font-size:12px}.media-thumb[data-v-839ff846]{height:72px;width:100%;border-radius:8px;border:1px solid #e5e7eb;-o-object-fit:cover;object-fit:cover}.media-empty[data-v-839ff846]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#9ca3af;font-size:12px}.media-warning[data-v-839ff846]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#b54708;font-size:12px}.media-actions[data-v-839ff846]{display:flex;gap:6px}.inspector[data-v-4cc442cf]{display:flex;flex-direction:column;gap:14px}.inspector-scope[data-v-4cc442cf]{align-self:stretch}.inspector-breadcrumb[data-v-4cc442cf]{display:flex;align-items:center;gap:2px;color:#6b7280;font-size:11px}.inspector-section[data-v-4cc442cf]{display:flex;flex-direction:column;gap:10px;border-top:1px solid #e5e7eb;padding-top:12px}.inspector-section-title[data-v-4cc442cf]{color:#9ca3af;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.inspector-note[data-v-4cc442cf]{color:#6b7280;font-size:11px;line-height:1.45}.inspector-warning[data-v-4cc442cf]{display:flex;align-items:flex-start;gap:6px;border-radius:8px;background:#fffbeb;padding:8px 10px;color:#92400e;font-size:12px}.inspector-list[data-v-4cc442cf]{display:flex;flex-direction:column;gap:8px}.inspector-list-head[data-v-4cc442cf]{display:flex;align-items:baseline;gap:6px}.inspector-list-count[data-v-4cc442cf]{border-radius:999px;background:#f3f4f6;padding:0 6px;color:#6b7280;font-size:10px;font-variant-numeric:tabular-nums}.inspector-item[data-v-4cc442cf]{display:flex;flex-direction:column;gap:10px;border:1px solid #e5e7eb;border-radius:10px;padding:10px;background:#fcfcfd}.inspector-item-head[data-v-4cc442cf]{display:flex;align-items:center;gap:2px}.inspector-item-name[data-v-4cc442cf]{flex:1;color:#6b7280;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.inspector-item-action[data-v-4cc442cf]{display:grid;flex:0 0 auto;place-items:center;border-radius:6px;padding:2px;color:#9ca3af}.inspector-item-action[data-v-4cc442cf]:hover:not(:disabled){background:#fff7ed;color:#f97316}.inspector-item-action[data-v-4cc442cf]:disabled{opacity:.35}.inspector-list-add[data-v-4cc442cf]{display:flex;gap:6px}.media-field[data-v-4cc442cf]{display:flex;flex-direction:column;gap:6px}.media-label[data-v-4cc442cf]{color:#4b5563;font-size:12px}.media-thumb[data-v-4cc442cf]{height:72px;width:100%;border-radius:8px;border:1px solid #e5e7eb;-o-object-fit:cover;object-fit:cover}.media-empty[data-v-4cc442cf]{display:grid;height:72px;place-items:center;border:1px dashed #d1d5db;border-radius:8px;color:#9ca3af;font-size:12px}.media-actions[data-v-4cc442cf]{display:flex;gap:6px}.editor-head[data-v-a673333e]{display:flex;shrink:0;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #e5e7eb;padding:12px 20px}.editor-identity[data-v-a673333e]{display:flex;min-width:0;align-items:center;gap:10px}.editor-name[data-v-a673333e]{width:min(320px,40vw)}.editor-orientation[data-v-a673333e]{width:160px}.editor-error[data-v-a673333e]{flex-shrink:0;margin:12px 16px 0;border-radius:8px;background:#fef2f2;padding:8px 12px;color:#b91c1c;font-size:13px}.rail-scale[data-v-a673333e]{display:flex;flex-direction:column;gap:6px;margin-bottom:18px;border-bottom:1px solid #e5e7eb;padding-bottom:16px}.rail-scale-label[data-v-a673333e]{color:#4b5563;font-size:12px;font-weight:600}.rail-scale-hint[data-v-a673333e]{margin:0;color:#6b7280;font-size:11px;line-height:1.4}.rail-scale-warning[data-v-a673333e]{margin:0;border-radius:8px;padding:6px 8px;color:#9a3412;background:#fff7ed;font-size:11px;line-height:1.4}.editor-body[data-v-a673333e]{display:grid;min-height:0;flex:1;grid-template-columns:268px minmax(0,1fr) 320px}.editor-rail[data-v-a673333e],.editor-inspector[data-v-a673333e]{min-height:0;overflow:auto;padding:16px}.editor-rail[data-v-a673333e]{border-right:1px solid #e5e7eb;background:#f9fafb}.editor-inspector[data-v-a673333e]{border-left:1px solid #e5e7eb;background:#f9fafb}.editor-stage[data-v-a673333e]{display:flex;min-height:0;flex-direction:column;gap:12px;overflow:auto;padding:16px}.stage-preview[data-v-a673333e]{display:flex;min-height:0;flex:1;align-items:center;justify-content:center}.preview-box[data-v-a673333e]{position:relative;margin:0 auto}.preview-box.preview-landscape[data-v-a673333e]{width:100%;max-height:72vh;aspect-ratio:16 / 9}.preview-box.preview-portrait[data-v-a673333e]{height:72vh;max-width:100%;aspect-ratio:9 / 16}.preview-frame[data-v-a673333e]{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;border:1px solid #e5e7eb;border-radius:12px;background:#101828}.preview-frame[data-v-a673333e]>*{width:100%;height:100%}.preview-edit-overlay[data-v-a673333e]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;pointer-events:none;transition:opacity .15s ease}.preview-box:hover .preview-edit-overlay[data-v-a673333e],.preview-box:focus-within .preview-edit-overlay[data-v-a673333e],.preview-edit-overlay.preview-edit-overlay-active[data-v-a673333e]{opacity:1;pointer-events:auto}@media (hover: none),(pointer: coarse){.preview-edit-overlay[data-v-a673333e]{opacity:1;pointer-events:auto}}.layout-bar[data-v-a673333e]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.layout-bar-title[data-v-a673333e]{display:flex;min-width:0;flex-direction:column;gap:2px}.layout-title[data-v-a673333e]{color:#111827;font-size:13px;font-weight:600}.layout-hint[data-v-a673333e]{color:#9ca3af;font-size:11px}.layout-actions[data-v-a673333e]{display:flex;flex-shrink:0;align-items:center;gap:6px}.layout-conflict[data-v-a673333e]{display:flex;align-items:flex-start;gap:6px;border-radius:8px;background:#fffbeb;padding:8px 10px;color:#92400e;font-size:12px;cursor:pointer}.preset-row[data-v-a673333e]{display:flex;flex-wrap:wrap;gap:8px;border-radius:10px;background:#f9fafb;padding:10px}.preset-card[data-v-a673333e]{display:flex;width:108px;flex-direction:column;gap:6px;border:1px solid #d1d5db;border-radius:10px;padding:8px;background:#fff;text-align:left}.preset-card[data-v-a673333e]:hover{border-color:#f97316;background:#fff7ed}.preset-diagram[data-v-a673333e]{display:flex;height:34px;gap:3px;border-radius:6px;background:#f3f4f6;padding:3px}.preset-row-dir[data-v-a673333e]{flex-direction:row}.preset-column-dir[data-v-a673333e]{flex-direction:column}.preset-cell[data-v-a673333e]{flex-basis:0;border-radius:4px;background:#fdba74}.preset-label[data-v-a673333e]{color:#374151;font-size:11px;line-height:1.3}@media (max-width: 1280px){.editor-body[data-v-a673333e]{grid-template-columns:220px minmax(0,1fr)}.editor-inspector[data-v-a673333e]{grid-column:1 / -1;border-left:0;border-top:1px solid #e5e7eb}}.layout-split[data-v-5595b416]{display:flex;min-width:0;min-height:0;flex:1;gap:6px}.layout-row[data-v-5595b416]{flex-direction:row}.layout-column[data-v-5595b416]{flex-direction:column}.layout-zone[data-v-5595b416]{display:flex;min-width:0;min-height:36px;flex:1;flex-direction:row;align-items:center;gap:8px;overflow:hidden;border:1.5px dashed #d1d5db;border-radius:10px;padding:6px 10px;background:#fff;text-align:left;transition:border-color .12s ease,background .12s ease}.layout-zone[data-v-5595b416]:hover{border-color:#fdba74;background:#fffbf5}.layout-zone-selected[data-v-5595b416]{border-style:solid;border-color:#f97316;background:#fff7ed;box-shadow:inset 0 0 0 1px #f97316}.layout-zone-index[data-v-5595b416]{flex:none;color:#6b7280;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.layout-zone-blocks[data-v-5595b416]{display:flex;min-width:0;gap:4px}.layout-zone-chip[data-v-5595b416]{display:inline-flex;max-width:100%;align-items:center;gap:4px;border-radius:999px;background:#f3f4f6;padding:3px 8px;color:#374151;font-size:11px}.display-toolbar[data-v-a2dda95a]{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #e5e7eb;padding-bottom:14px}.display-controls[data-v-a2dda95a]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:12px}.display-restaurant-select[data-v-a2dda95a]{width:min(360px,100%)}.display-outlet[data-v-a2dda95a]{display:flex;align-items:center;gap:16px}.display-entitlement[data-v-a2dda95a]{color:#6b7280;font-size:12px;white-space:nowrap}.restriction-note[data-v-a2dda95a]{margin-top:12px;border:1px solid #fed7aa;border-radius:10px;padding:10px 12px;color:#9a3412;background:#fff7ed;font-size:13px}.empty-state[data-v-a2dda95a]{display:grid;justify-items:center;gap:6px;border:1px dashed #d1d5db;border-radius:12px;padding:56px 20px;color:#6b7280;text-align:center}.empty-state strong[data-v-a2dda95a]{color:#111827}.layout-thumb[data-v-a2dda95a]{display:flex;height:auto;min-height:96px;margin-top:16px;border-radius:10px;background:#f3f4f6;padding:5px;pointer-events:none}.thumb-caption[data-v-a2dda95a]{margin-top:8px;color:#6b7280;font-size:11px}.resource-card[data-v-a2dda95a]{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff;box-shadow:0 2px 8px #0000000a}.mode-badge[data-v-a2dda95a],.status-badge[data-v-a2dda95a]{border-radius:999px;padding:3px 8px;background:#f3f4f6;font-size:11px;font-weight:700}.status-badge.active[data-v-a2dda95a]{color:#166534;background:#dcfce7}.status-badge.disabled[data-v-a2dda95a]{color:#991b1b;background:#fee2e2}.status-badge.unlicensed[data-v-a2dda95a]{color:#b42318;background:#fef3f2;border:1px solid #fecdca}.online-dot[data-v-a2dda95a]{color:#6b7280;font-size:11px}.online-dot[data-v-a2dda95a]:before{display:inline-block;width:7px;height:7px;margin-right:5px;border-radius:50%;background:#9ca3af;content:""}.online-dot.online[data-v-a2dda95a]{color:#15803d}.online-dot.online[data-v-a2dda95a]:before{background:#22c55e}.meta-grid[data-v-a2dda95a]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:18px;border-top:1px solid #f0f0f0;padding-top:16px}.meta-grid dt[data-v-a2dda95a]{color:#6b7280;font-size:11px}.meta-grid dd[data-v-a2dda95a]{overflow:hidden;margin-top:2px;font-size:12px;text-overflow:ellipsis;white-space:nowrap}@media (max-width:640px){.display-toolbar[data-v-a2dda95a]{align-items:flex-start}.display-controls[data-v-a2dda95a]{align-items:stretch;flex-direction:column}.display-outlet[data-v-a2dda95a]{align-items:stretch;flex-direction:column;gap:8px}.display-restaurant-select[data-v-a2dda95a]{width:100%}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feedmepos/mf-order-setting",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.92",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "./dist/app.js",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@feedmepos/core": "^2.15.
|
|
13
|
+
"@feedmepos/core": "^2.15.56",
|
|
14
14
|
"@feedmepos/entity": "0.0.20",
|
|
15
15
|
"@feedmepos/feature-flag": "^0.0.15",
|
|
16
16
|
"@feedmepos/hrm-permission": "^1.0.13",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { baseClientInstance, getData } from '@/api'
|
|
2
|
+
import type { FdoOrderReservationSettingsV2 } from '@entity'
|
|
3
|
+
|
|
4
|
+
// reservation-backend portal routes. The portal host's ingress rewrites
|
|
5
|
+
// `/reservation(.*)` to `/portal/reservation$1` on reservation-backend.
|
|
6
|
+
async function getReservationSetting(restaurantId: string): Promise<FdoOrderReservationSettingsV2> {
|
|
7
|
+
const result = await baseClientInstance().get(`/reservation/restaurant/${restaurantId}/setting`)
|
|
8
|
+
return getData<FdoOrderReservationSettingsV2>(result)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async function updateReservationSetting(
|
|
12
|
+
restaurantId: string,
|
|
13
|
+
payload: FdoOrderReservationSettingsV2
|
|
14
|
+
): Promise<FdoOrderReservationSettingsV2> {
|
|
15
|
+
const result = await baseClientInstance().put(
|
|
16
|
+
`/reservation/restaurant/${restaurantId}/setting`,
|
|
17
|
+
payload
|
|
18
|
+
)
|
|
19
|
+
return getData<FdoOrderReservationSettingsV2>(result)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const ReservationApi = {
|
|
23
|
+
getReservationSetting,
|
|
24
|
+
updateReservationSetting
|
|
25
|
+
}
|
|
Binary file
|
package/src/locales/en-US.json
CHANGED
|
@@ -66,6 +66,8 @@
|
|
|
66
66
|
"acceptedPayment": "Accepted Payment",
|
|
67
67
|
"acceptQueue": "Accept queue",
|
|
68
68
|
"acceptQueueSublabel": "Customer can use queue in FeedMe app",
|
|
69
|
+
"acceptReservation": "Accept reservation",
|
|
70
|
+
"acceptReservationSublabel": "Customers can book a table. FeedMe admin only",
|
|
69
71
|
"actiavteFeedmeExpress": "Activate FeedMe Express",
|
|
70
72
|
"activated": "Activated",
|
|
71
73
|
"activatedDate": "Activated date",
|
|
@@ -398,6 +400,25 @@
|
|
|
398
400
|
"padDigit": "Pad Digit",
|
|
399
401
|
"paid": "Paid",
|
|
400
402
|
"paxMax": "Pax Max",
|
|
403
|
+
"reservation": "Reservation",
|
|
404
|
+
"reservationStatus": "Reservation Status",
|
|
405
|
+
"reservationAvailability": "Reservation Availability",
|
|
406
|
+
"notificationSettings": "Notification Settings",
|
|
407
|
+
"smsEnabled": "Enable SMS Notifications",
|
|
408
|
+
"smsEnabledDescription": "Send SMS notifications to customers for reservation updates",
|
|
409
|
+
"emailEnabled": "Enable Email Notifications",
|
|
410
|
+
"emailEnabledDescription": "Send email notifications to customers for reservation updates",
|
|
411
|
+
"notifyOnConfirm": "Notify on Confirmation",
|
|
412
|
+
"notifyOnConfirmDescription": "Send notifications when a reservation is confirmed",
|
|
413
|
+
"notifyOnCancel": "Notify on Cancellation",
|
|
414
|
+
"notifyOnCancelDescription": "Send notifications when a reservation is cancelled",
|
|
415
|
+
"draftHoldTimeMinutes": "Draft Hold Time (Minutes)",
|
|
416
|
+
"posCanOverbook": "POS Can Overbook",
|
|
417
|
+
"posCanOverbookDescription": "Allow POS to create reservations even when capacity is full",
|
|
418
|
+
"saveAllChanges": "Save All Changes",
|
|
419
|
+
"settingUpdated": "Settings updated successfully",
|
|
420
|
+
"validationError": "Validation Error",
|
|
421
|
+
"ok": "OK",
|
|
401
422
|
"paxMin": "Pax Min",
|
|
402
423
|
"payAtCounter": "Pay at Counter",
|
|
403
424
|
"paymentMethod": "Payment Method",
|
package/src/locales/ja-JP.json
CHANGED
|
@@ -66,6 +66,8 @@
|
|
|
66
66
|
"acceptedPayment": "受け付けた支払い",
|
|
67
67
|
"acceptQueue": "待ち行列を受け付ける",
|
|
68
68
|
"acceptQueueSublabel": "お客様はFeedMeアプリで順番待ちができます",
|
|
69
|
+
"acceptReservation": "予約を受け付ける",
|
|
70
|
+
"acceptReservationSublabel": "お客様はテーブルを予約できます。FeedMe管理者のみ",
|
|
69
71
|
"actiavteFeedmeExpress": "FeedMe Expressを有効にする",
|
|
70
72
|
"activated": "有効化済み",
|
|
71
73
|
"activatedDate": "有効化日",
|
|
@@ -344,6 +346,25 @@
|
|
|
344
346
|
"current": "現在",
|
|
345
347
|
"paxMin": "最小人数",
|
|
346
348
|
"paxMax": "最大人数",
|
|
349
|
+
"reservation": "予約",
|
|
350
|
+
"reservationStatus": "予約ステータス",
|
|
351
|
+
"reservationAvailability": "予約受付期間",
|
|
352
|
+
"notificationSettings": "通知設定",
|
|
353
|
+
"smsEnabled": "SMS通知を有効にする",
|
|
354
|
+
"smsEnabledDescription": "予約の更新をSMSでお客様に通知します",
|
|
355
|
+
"emailEnabled": "メール通知を有効にする",
|
|
356
|
+
"emailEnabledDescription": "予約の更新をメールでお客様に通知します",
|
|
357
|
+
"notifyOnConfirm": "予約確定時に通知",
|
|
358
|
+
"notifyOnConfirmDescription": "予約が確定したときに通知を送信します",
|
|
359
|
+
"notifyOnCancel": "キャンセル時に通知",
|
|
360
|
+
"notifyOnCancelDescription": "予約がキャンセルされたときに通知を送信します",
|
|
361
|
+
"draftHoldTimeMinutes": "仮予約の保持時間(分)",
|
|
362
|
+
"posCanOverbook": "POSでのオーバーブッキングを許可",
|
|
363
|
+
"posCanOverbookDescription": "満席の場合でもPOSで予約を作成できるようにします",
|
|
364
|
+
"saveAllChanges": "すべての変更を保存",
|
|
365
|
+
"settingUpdated": "設定を更新しました",
|
|
366
|
+
"validationError": "入力エラー",
|
|
367
|
+
"ok": "OK",
|
|
347
368
|
"qrPay": "QR決済",
|
|
348
369
|
"terminalScanPay": "端末スキャン決済",
|
|
349
370
|
"terminalQrPay": "端末QR決済",
|
package/src/locales/th-TH.json
CHANGED
|
@@ -159,6 +159,8 @@
|
|
|
159
159
|
"acceptedPayment": "ช่องทางการชำระเงินที่รองรับ",
|
|
160
160
|
"acceptQueue": "จองคิว",
|
|
161
161
|
"acceptQueueSublabel": "ลูกค้าสามารถจองคิวผ่านแอป FeedMe",
|
|
162
|
+
"acceptReservation": "รับการจองโต๊ะ",
|
|
163
|
+
"acceptReservationSublabel": "ลูกค้าสามารถจองโต๊ะได้ เฉพาะผู้ดูแลระบบ FeedMe",
|
|
162
164
|
"actiavteFeedmeExpress": "เปิดใช้งาน FeedMe Express",
|
|
163
165
|
"activated": "เปิดใช้งานแล้ว",
|
|
164
166
|
"activatedDate": "วันที่เปิดใช้งาน",
|
|
@@ -441,6 +443,25 @@
|
|
|
441
443
|
"current": "ปัจจุบัน",
|
|
442
444
|
"paxMin": "จำนวนลูกค้าขั้นต่ำ",
|
|
443
445
|
"paxMax": "จำนวนลูกค้าสูงสุด",
|
|
446
|
+
"reservation": "การจอง",
|
|
447
|
+
"reservationStatus": "สถานะการจอง",
|
|
448
|
+
"reservationAvailability": "ช่วงเวลาที่เปิดรับจอง",
|
|
449
|
+
"notificationSettings": "การตั้งค่าการแจ้งเตือน",
|
|
450
|
+
"smsEnabled": "เปิดใช้งานการแจ้งเตือนผ่าน SMS",
|
|
451
|
+
"smsEnabledDescription": "ส่งการแจ้งเตือนผ่าน SMS ให้กับลูกค้าสำหรับการอัพเดทการจอง",
|
|
452
|
+
"emailEnabled": "เปิดใช้งานการแจ้งเตือนผ่านอีเมล",
|
|
453
|
+
"emailEnabledDescription": "ส่งการแจ้งเตือนผ่านอีเมลให้กับลูกค้าสำหรับการอัพเดทการจอง",
|
|
454
|
+
"notifyOnConfirm": "แจ้งเตือนเมื่อยืนยัน",
|
|
455
|
+
"notifyOnConfirmDescription": "ส่งการแจ้งเตือนเมื่อการจองได้รับการยืนยัน",
|
|
456
|
+
"notifyOnCancel": "แจ้งเตือนเมื่อยกเลิก",
|
|
457
|
+
"notifyOnCancelDescription": "ส่งการแจ้งเตือนเมื่อการจองถูกยกเลิก",
|
|
458
|
+
"draftHoldTimeMinutes": "เวลาเก็บร่าง (นาที)",
|
|
459
|
+
"posCanOverbook": "POS สามารถจองเกินได้",
|
|
460
|
+
"posCanOverbookDescription": "อนุญาตให้ POS สร้างการจองแม้ว่าความจุเต็มแล้ว",
|
|
461
|
+
"saveAllChanges": "บันทึกการเปลี่ยนแปลงทั้งหมด",
|
|
462
|
+
"settingUpdated": "อัปเดตการตั้งค่าสำเร็จ",
|
|
463
|
+
"validationError": "ข้อผิดพลาดในการตรวจสอบ",
|
|
464
|
+
"ok": "ตกลง",
|
|
444
465
|
"qrPay": "ชำระเงินด้วย QR",
|
|
445
466
|
"terminalScanPay": "ชำระเงินด้วยการสแกนเทอร์มินัล",
|
|
446
467
|
"terminalQrPay": "ชำระเงินด้วย QR เทอร์มินัล",
|
package/src/locales/zh-CN.json
CHANGED
|
@@ -159,6 +159,8 @@
|
|
|
159
159
|
"acceptedPayment": "可接受付款方式",
|
|
160
160
|
"acceptQueue": "接受队列",
|
|
161
161
|
"acceptQueueSublabel": "客户可以在FeedMe应用中使用排队功能",
|
|
162
|
+
"acceptReservation": "接受预订",
|
|
163
|
+
"acceptReservationSublabel": "客户可以预订餐桌。仅限 FeedMe 管理员",
|
|
162
164
|
"actiavteFeedmeExpress": "激活FeedMe外卖配送",
|
|
163
165
|
"activated": "已激活",
|
|
164
166
|
"activatedDate": "激活日期",
|
|
@@ -443,6 +445,25 @@
|
|
|
443
445
|
"current": "当前",
|
|
444
446
|
"paxMin": "最少人数",
|
|
445
447
|
"paxMax": "最多人数",
|
|
448
|
+
"reservation": "预订",
|
|
449
|
+
"reservationStatus": "预订状态",
|
|
450
|
+
"reservationAvailability": "预订开放时间",
|
|
451
|
+
"notificationSettings": "通知设置",
|
|
452
|
+
"smsEnabled": "启用短信通知",
|
|
453
|
+
"smsEnabledDescription": "向客户发送预订更新的短信通知",
|
|
454
|
+
"emailEnabled": "启用电子邮件通知",
|
|
455
|
+
"emailEnabledDescription": "向客户发送预订更新的电子邮件通知",
|
|
456
|
+
"notifyOnConfirm": "确认时通知",
|
|
457
|
+
"notifyOnConfirmDescription": "当预订被确认时发送通知",
|
|
458
|
+
"notifyOnCancel": "取消时通知",
|
|
459
|
+
"notifyOnCancelDescription": "当预订被取消时发送通知",
|
|
460
|
+
"draftHoldTimeMinutes": "草稿保留时间(分钟)",
|
|
461
|
+
"posCanOverbook": "POS可以超额预订",
|
|
462
|
+
"posCanOverbookDescription": "允许POS在容量已满时创建预订",
|
|
463
|
+
"saveAllChanges": "保存所有更改",
|
|
464
|
+
"settingUpdated": "设置已成功更新",
|
|
465
|
+
"validationError": "验证错误",
|
|
466
|
+
"ok": "确定",
|
|
446
467
|
"qrPay": "二维码支付",
|
|
447
468
|
"terminalScanPay": "终端扫描支付",
|
|
448
469
|
"terminalQrPay": "终端二维码支付",
|
|
@@ -27,13 +27,16 @@ import SmsSetting from './sms/SmsSetting.vue'
|
|
|
27
27
|
|
|
28
28
|
import GeneralSetting from './general/GeneralSetting.vue'
|
|
29
29
|
import QueueSetting from './queue/QueueSetting.vue'
|
|
30
|
+
import ReservationSetting from './reservation/ReservationSetting.vue'
|
|
30
31
|
import { useI18n, useCoreStore } from '@feedmepos/mf-common'
|
|
31
32
|
import { useMenuStore } from '@/stores/menu/menu'
|
|
32
33
|
import { useSnackbarFunctions } from '@/components/snackbar'
|
|
33
34
|
import { useQrOrderingEnabled } from '@/composables/useQrOrderingEnabled'
|
|
34
35
|
|
|
35
36
|
const { t } = useI18n()
|
|
36
|
-
const { currentRestaurant } = useCoreStore()
|
|
37
|
+
const { currentRestaurant, sessionUser } = useCoreStore()
|
|
38
|
+
// Reservations are FeedMe-admin only during the pilot (as the Dine-in switch).
|
|
39
|
+
const isAdmin = computed(() => sessionUser.value?.role?.isAdmin ?? false)
|
|
37
40
|
const menuStore = useMenuStore()
|
|
38
41
|
const { showError } = useSnackbarFunctions()
|
|
39
42
|
const qrEnabled = useQrOrderingEnabled()
|
|
@@ -47,6 +50,7 @@ type OrderSettingMenuItemValue =
|
|
|
47
50
|
// | 'discountRule'
|
|
48
51
|
| 'general'
|
|
49
52
|
| 'queue'
|
|
53
|
+
| 'reservation'
|
|
50
54
|
const selectedOrderSetting = ref<OrderSettingMenuItemValue>('delivery')
|
|
51
55
|
|
|
52
56
|
const settingItem = computed<FmTabProps[]>(() => {
|
|
@@ -63,7 +67,8 @@ const settingItem = computed<FmTabProps[]>(() => {
|
|
|
63
67
|
// { label: t('order.discountRule.title'), value: 'discountRule' },
|
|
64
68
|
{ label: t('order.notifications'), value: 'sms' },
|
|
65
69
|
{ label: t('order.general'), value: 'general' },
|
|
66
|
-
{ label: t('order.queue'), value: 'queue' }
|
|
70
|
+
{ label: t('order.queue'), value: 'queue' },
|
|
71
|
+
...(isAdmin.value ? [{ label: t('order.reservation'), value: 'reservation' }] : [])
|
|
67
72
|
]
|
|
68
73
|
})
|
|
69
74
|
|
|
@@ -97,6 +102,8 @@ const currentComponent = computed(() => {
|
|
|
97
102
|
return GeneralSetting
|
|
98
103
|
case 'queue':
|
|
99
104
|
return QueueSetting
|
|
105
|
+
case 'reservation':
|
|
106
|
+
return ReservationSetting
|
|
100
107
|
default:
|
|
101
108
|
return DeliverySetting
|
|
102
109
|
}
|
|
@@ -42,6 +42,27 @@ describe('isIntegratedPlatformSupported', () => {
|
|
|
42
42
|
)
|
|
43
43
|
})
|
|
44
44
|
|
|
45
|
+
it('offers exactly these platforms per country', () => {
|
|
46
|
+
const C = AUTO_INTEGRATION_CLIENT
|
|
47
|
+
const expected: Record<string, AUTO_INTEGRATION_CLIENT[]> = {
|
|
48
|
+
MY: [C.foodpanda, C.grabfood, C.shopeefood, C.tng, C.external],
|
|
49
|
+
SG: [C.foodpanda, C.grabfood, C.deliveroo, C.external],
|
|
50
|
+
TH: [C.grabfood, C.external, C.lineman],
|
|
51
|
+
PK: [C.foodpanda, C.external],
|
|
52
|
+
ID: [C.grabfood, C.gofood, C.external],
|
|
53
|
+
GB: [C.external],
|
|
54
|
+
BN: [],
|
|
55
|
+
VN: []
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
for (const [country, offered] of Object.entries(expected)) {
|
|
59
|
+
const actual = Object.values(C).filter((key) =>
|
|
60
|
+
isIntegratedPlatformSupported(key, country as F_COUNTRY)
|
|
61
|
+
)
|
|
62
|
+
expect([country, actual.sort()]).toEqual([country, [...offered].sort()])
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
|
|
45
66
|
it('offers no other integrated platform in the UK (GB)', () => {
|
|
46
67
|
const others = Object.values(AUTO_INTEGRATION_CLIENT).filter(
|
|
47
68
|
(key) => key !== AUTO_INTEGRATION_CLIENT.external
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from '@feedmepos/core/entity'
|
|
7
7
|
import { useCoreStore } from '@feedmepos/mf-common'
|
|
8
8
|
import { F_ORDER_PLATFORM, type FdoExternalSetting } from '@entity'
|
|
9
|
+
import { isIntegratedPlatformOffered } from '@common/order-platform'
|
|
9
10
|
|
|
10
11
|
export type LinkedDeliveryDoc = FdoLinkedDelivery & { _rev: string }
|
|
11
12
|
|
|
@@ -100,57 +101,7 @@ export function useDelivery() {
|
|
|
100
101
|
country?: F_COUNTRY | null
|
|
101
102
|
): boolean {
|
|
102
103
|
country = country || useCoreStore().currentCountry.value || F_COUNTRY.enum.MY
|
|
103
|
-
|
|
104
|
-
AUTO_INTEGRATION_CLIENT.foodpanda,
|
|
105
|
-
AUTO_INTEGRATION_CLIENT.grabfood,
|
|
106
|
-
AUTO_INTEGRATION_CLIENT.shopeefood,
|
|
107
|
-
AUTO_INTEGRATION_CLIENT.tng,
|
|
108
|
-
AUTO_INTEGRATION_CLIENT.external
|
|
109
|
-
]
|
|
110
|
-
const sgSupported = [
|
|
111
|
-
AUTO_INTEGRATION_CLIENT.foodpanda,
|
|
112
|
-
AUTO_INTEGRATION_CLIENT.grabfood,
|
|
113
|
-
AUTO_INTEGRATION_CLIENT.deliveroo,
|
|
114
|
-
AUTO_INTEGRATION_CLIENT.external
|
|
115
|
-
]
|
|
116
|
-
const thSupported = [
|
|
117
|
-
AUTO_INTEGRATION_CLIENT.grabfood,
|
|
118
|
-
AUTO_INTEGRATION_CLIENT.external,
|
|
119
|
-
AUTO_INTEGRATION_CLIENT.lineman
|
|
120
|
-
]
|
|
121
|
-
const pkSupported = [AUTO_INTEGRATION_CLIENT.foodpanda, AUTO_INTEGRATION_CLIENT.external]
|
|
122
|
-
const idSupported = [
|
|
123
|
-
AUTO_INTEGRATION_CLIENT.grabfood,
|
|
124
|
-
AUTO_INTEGRATION_CLIENT.gofood,
|
|
125
|
-
AUTO_INTEGRATION_CLIENT.external
|
|
126
|
-
]
|
|
127
|
-
const gbSupported = [AUTO_INTEGRATION_CLIENT.external]
|
|
128
|
-
|
|
129
|
-
let supportedPlatforms: AUTO_INTEGRATION_CLIENT[] = []
|
|
130
|
-
switch (country) {
|
|
131
|
-
case F_COUNTRY.enum.MY:
|
|
132
|
-
supportedPlatforms = mySupported
|
|
133
|
-
break
|
|
134
|
-
case F_COUNTRY.enum.SG:
|
|
135
|
-
supportedPlatforms = sgSupported
|
|
136
|
-
break
|
|
137
|
-
case F_COUNTRY.enum.TH:
|
|
138
|
-
supportedPlatforms = thSupported
|
|
139
|
-
break
|
|
140
|
-
case F_COUNTRY.enum.PK:
|
|
141
|
-
supportedPlatforms = pkSupported
|
|
142
|
-
break
|
|
143
|
-
case F_COUNTRY.enum.ID:
|
|
144
|
-
supportedPlatforms = idSupported
|
|
145
|
-
break
|
|
146
|
-
case F_COUNTRY.enum.GB:
|
|
147
|
-
supportedPlatforms = gbSupported
|
|
148
|
-
break
|
|
149
|
-
default:
|
|
150
|
-
break
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return supportedPlatforms.includes(platform)
|
|
104
|
+
return isIntegratedPlatformOffered(platform, country)
|
|
154
105
|
}
|
|
155
106
|
|
|
156
107
|
return {
|
|
@@ -60,6 +60,14 @@
|
|
|
60
60
|
:sublabel="t('order.acceptQueueSublabel')"
|
|
61
61
|
label-placement="right"
|
|
62
62
|
/>
|
|
63
|
+
<FmSwitch
|
|
64
|
+
v-if="isAdmin"
|
|
65
|
+
v-model="dineInSetting.acceptReservation as boolean"
|
|
66
|
+
value="acceptReservation"
|
|
67
|
+
:label="t('order.acceptReservation')"
|
|
68
|
+
:sublabel="t('order.acceptReservationSublabel')"
|
|
69
|
+
label-placement="right"
|
|
70
|
+
/>
|
|
63
71
|
|
|
64
72
|
<FmSwitch
|
|
65
73
|
:model-value="lastOrderBeforeCloseEnable"
|
|
@@ -201,8 +209,10 @@ const { t } = useI18n()
|
|
|
201
209
|
|
|
202
210
|
type OrderDineInSettings = NonNullable<OrderSettingsDto['dineInSettings']>
|
|
203
211
|
|
|
204
|
-
const { currentRestaurant } = useCoreStore()
|
|
212
|
+
const { currentRestaurant, sessionUser } = useCoreStore()
|
|
205
213
|
const restaurantStore = useRestaurantStore()
|
|
214
|
+
// Reservations are switched on per outlet by FeedMe admins during the pilot.
|
|
215
|
+
const isAdmin = computed(() => sessionUser.value?.role?.isAdmin ?? false)
|
|
206
216
|
const dineInSetting = ref<FdoRestaurantDineIn>(initDineInSetting())
|
|
207
217
|
const orderSetting = ref<OrderSettingsDto | undefined>(undefined)
|
|
208
218
|
const lastOrderBeforeCloseEnable = ref<boolean>(false)
|