diff --git a/.openclaw/workspace-state.json b/.openclaw/workspace-state.json new file mode 100644 index 00000000..eb1cb803 --- /dev/null +++ b/.openclaw/workspace-state.json @@ -0,0 +1,4 @@ +{ + "version": 1, + "setupCompletedAt": "2026-06-07T11:37:04.444Z" +} diff --git a/src/components/displays/selfServe/ErrorBanner.vue b/src/components/displays/selfServe/ErrorBanner.vue new file mode 100644 index 00000000..4b9c1c8e --- /dev/null +++ b/src/components/displays/selfServe/ErrorBanner.vue @@ -0,0 +1,72 @@ + + + + + + diff --git a/src/components/displays/selfServe/LaneSelectionSection.vue b/src/components/displays/selfServe/LaneSelectionSection.vue new file mode 100644 index 00000000..ed3764c5 --- /dev/null +++ b/src/components/displays/selfServe/LaneSelectionSection.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/components/displays/selfServe/VehicleInputSection.vue b/src/components/displays/selfServe/VehicleInputSection.vue new file mode 100644 index 00000000..a9d7187c --- /dev/null +++ b/src/components/displays/selfServe/VehicleInputSection.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/components/displays/selfServe/WashProgressCard.vue b/src/components/displays/selfServe/WashProgressCard.vue new file mode 100644 index 00000000..5393325e --- /dev/null +++ b/src/components/displays/selfServe/WashProgressCard.vue @@ -0,0 +1,255 @@ + + + + + + diff --git a/src/components/displays/selfServe/WashTypeSelector.vue b/src/components/displays/selfServe/WashTypeSelector.vue new file mode 100644 index 00000000..8942e9e5 --- /dev/null +++ b/src/components/displays/selfServe/WashTypeSelector.vue @@ -0,0 +1,170 @@ + + + + + + diff --git a/src/views/dashboards/userDashboard/wash/MyWashStart.vue b/src/views/dashboards/userDashboard/wash/MyWashStart.vue index 7c845f0c..0ea9566a 100644 --- a/src/views/dashboards/userDashboard/wash/MyWashStart.vue +++ b/src/views/dashboards/userDashboard/wash/MyWashStart.vue @@ -13,6 +13,8 @@ import SelfServeLaneStep from "@/components/displays/selfServe/SelfServeLaneStep import SelfServeTasksStep from "@/components/displays/selfServe/SelfServeTasksStep.vue"; import SelfServeGuidedInstructions from "@/components/displays/selfServe/SelfServeGuidedInstructions.vue"; import SelfServeCompletedStep from "@/components/displays/selfServe/SelfServeCompletedStep.vue"; +import ErrorBanner from "@/components/displays/selfServe/ErrorBanner.vue"; +import WashProgressCard from "@/components/displays/selfServe/WashProgressCard.vue"; import { guidedWashFlowSteps } from "@/constants/guidedWashFlowSteps"; import { useSelfServeLogic } from "@/composables/useSelfServeLogic"; import { useWashDepartments } from "@/composables/useWashDepartments"; @@ -2022,73 +2024,32 @@ watch( - -
- {{ departmentFetchError }} - - {{ $t("common.try_again") }} - -
-
+ @retry="fetchDepartments" + /> - -
- {{ selfServeDataError }} - - {{ $t("common.try_again") }} - -
-
+ @retry="retrySelfServeData" + /> - -
- {{ washActionError }} - - {{ $t("common.try_again") }} - -
-
+ @retry="retryWashAction" + />
-
- - {{ $t("self_wash.assistance") }} - -
- -
- - {{ $t("self_wash.open_property_access_gate") }} - - - - {{ $t("self_wash.open_property_exit_gate") }} - -
- -
- - {{ $t("common.previous") }} - - - - {{ $t("common.next") }} - - - - {{ $t("common.done") }} - -
+ + +
@@ -2543,21 +2446,6 @@ watch( margin-bottom: 0; } -.self-serve-bottom-actions { - display: flex; - flex-direction: column; - gap: 0.75rem; - justify-content: center; - margin: 0.75rem auto 0; - max-width: 30rem; -} - -.self-serve-bottom-actions__row { - display: flex; - gap: 0.75rem; - justify-content: center; - width: 100%; -} .self-serve-bottom-actions__row--prewash { max-width: 30rem; @@ -2573,10 +2461,21 @@ watch( white-space: normal; } -.self-serve-finishing-screen { - margin: 0 auto; - max-width: 32rem; - text-align: left; +/* Wash progress card bottom actions (during active wash) */ +.self-serve-bottom-actions { + display: flex; + flex-direction: column; + gap: 0.75rem; + justify-content: center; + margin: 0.75rem auto 0; + max-width: 30rem; +} + +.self-serve-bottom-actions__row { + display: flex; + gap: 0.75rem; + justify-content: center; + width: 100%; } @media screen and (max-width: 768px) {