From 64844105b5b3f22f57666071d98a2a74aff37a7a Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Wed, 29 Apr 2026 15:41:20 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20=E9=9D=A2=E5=8C=85=E5=B1=91=E5=AF=BC?= =?UTF-8?q?=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.ts | 45 ++++++++++++------- .../MyListings/EditDetail/index.vue | 18 +++++++- .../MyListings/createSelectItem/index.vue | 3 +- src/views/SellerDashboard/seller-header.vue | 35 ++++++++++++--- 4 files changed, 77 insertions(+), 24 deletions(-) diff --git a/src/router/index.ts b/src/router/index.ts index 00087983..cdc0e5fb 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -8,8 +8,9 @@ type SellerRouteMetaValue = T | ((route: RouteLocationNormalizedLoaded) => T) type SellerBreadcrumbItem = { title?: SellerRouteMetaValue titleKey?: SellerRouteMetaValue - to?: SellerRouteMetaValue + to?: SellerRouteMetaValue } +type SellerBreadcrumbList = SellerRouteMetaValue const myListingsBreadcrumb: SellerBreadcrumbItem = { title: "My Listings", @@ -20,7 +21,16 @@ const selectCollectionBreadcrumb: SellerBreadcrumbItem = { to: { name: "myListingsSelect" } } const selectSketchBreadcrumb: SellerBreadcrumbItem = { - title: "Select Sketch" + title: "Select Sketch", + to: (route) => { + const collectionId = + route.params.collectionId || + (typeof history !== "undefined" ? history.state?.collectionId : "") + + return collectionId + ? { name: "myListingsSelectItem", params: { collectionId } } + : undefined + } } const editListingBreadcrumb: SellerBreadcrumbItem = { title: "Edit Listing Details" @@ -31,6 +41,22 @@ const statusBreadcrumb: SellerBreadcrumbItem = { ? "SellerListEdit.listingLive" : "SellerListEdit.draftSaved" } +const createListingBreadcrumbs: SellerBreadcrumbItem[] = [ + myListingsBreadcrumb, + selectCollectionBreadcrumb, + selectSketchBreadcrumb, + editListingBreadcrumb +] +const isEditingListingFromList = () => + typeof history !== "undefined" && history.state?.type === "edit" +const editListingBreadcrumbs: SellerBreadcrumbList = () => + isEditingListingFromList() + ? [myListingsBreadcrumb, editListingBreadcrumb] + : createListingBreadcrumbs +const listingStatusBreadcrumbs: SellerBreadcrumbList = () => + isEditingListingFromList() + ? [myListingsBreadcrumb, editListingBreadcrumb, statusBreadcrumb] + : [...createListingBreadcrumbs, statusBreadcrumb] const routes: Array = [ { @@ -273,12 +299,7 @@ const routes: Array = [ meta: { enter: "all", sellerHeaderTitle: "Edit Listing Details", - sellerBreadcrumbs: [ - myListingsBreadcrumb, - selectCollectionBreadcrumb, - selectSketchBreadcrumb, - editListingBreadcrumb - ] + sellerBreadcrumbs: editListingBreadcrumbs }, component: () => import("@/views/SellerDashboard/MyListings/EditDetail/index.vue") @@ -289,13 +310,7 @@ const routes: Array = [ meta: { enter: "all", sellerHeaderTitle: "Edit Listing Details", - sellerBreadcrumbs: [ - myListingsBreadcrumb, - selectCollectionBreadcrumb, - selectSketchBreadcrumb, - editListingBreadcrumb, - statusBreadcrumb - ] + sellerBreadcrumbs: listingStatusBreadcrumbs }, component: () => import("@/views/SellerDashboard/MyListings/EditDetail/Status.vue") diff --git a/src/views/SellerDashboard/MyListings/EditDetail/index.vue b/src/views/SellerDashboard/MyListings/EditDetail/index.vue index 65a1456f..9e7a8c45 100644 --- a/src/views/SellerDashboard/MyListings/EditDetail/index.vue +++ b/src/views/SellerDashboard/MyListings/EditDetail/index.vue @@ -403,11 +403,25 @@ if (status === "draft") { // save draft logic // console.log("Saving draft...", currentListing.value) - ROUTER.push({ name: "Status", params: { status: "draft" } }) + ROUTER.push({ + name: "Status", + params: { status: "draft" }, + state: { + type: history.state?.type, + collectionId: history.state?.collectionId + } + }) } else if (status === "publish") { // publish logic // console.log("Publishing...", currentListing.value) - ROUTER.push({ name: "Status", params: { status: "publish" } }) + ROUTER.push({ + name: "Status", + params: { status: "publish" }, + state: { + type: history.state?.type, + collectionId: history.state?.collectionId + } + }) } } diff --git a/src/views/SellerDashboard/MyListings/createSelectItem/index.vue b/src/views/SellerDashboard/MyListings/createSelectItem/index.vue index 4e91dad3..eabede74 100644 --- a/src/views/SellerDashboard/MyListings/createSelectItem/index.vue +++ b/src/views/SellerDashboard/MyListings/createSelectItem/index.vue @@ -50,7 +50,8 @@ const next = ()=>{ path:'/home/seller/myListings/edit', state: { designItemIds, - type:'create' + type:'create', + collectionId: route.params.collectionId } }) } diff --git a/src/views/SellerDashboard/seller-header.vue b/src/views/SellerDashboard/seller-header.vue index 78c6991f..5eabacaf 100644 --- a/src/views/SellerDashboard/seller-header.vue +++ b/src/views/SellerDashboard/seller-header.vue @@ -41,7 +41,7 @@ | { title?: RouteMetaValue titleKey?: RouteMetaValue - to?: RouteMetaValue + to?: RouteMetaValue name?: string path?: string } @@ -49,6 +49,7 @@ title: string to?: RouteLocationRaw } + type SellerBreadcrumbsSource = RouteMetaValue const props = withDefaults( defineProps<{ @@ -113,7 +114,9 @@ const autoBreadcrumbs = computed(() => { const currentRecord = route.matched[route.matched.length - 1] - const customBreadcrumbs = currentRecord?.meta?.sellerBreadcrumbs + const customBreadcrumbs = resolveMetaValue( + currentRecord?.meta?.sellerBreadcrumbs as SellerBreadcrumbsSource | undefined + ) if (Array.isArray(customBreadcrumbs)) { return customBreadcrumbs @@ -165,13 +168,33 @@ const onBreadcrumbClick = (breadcrumb: SellerBreadcrumbItem, index: number) => { if (index >= breadcrumbList.value.length - 1) return - if (breadcrumb.to) { - router.push(breadcrumb.to) + + const historyIndex = -(breadcrumbList.value.length - index - 1) + if (canUseBreadcrumbHistory(Math.abs(historyIndex))) { + router.go(historyIndex) return } - const historyIndex = -(breadcrumbList.value.length - index - 1) - if (historyIndex < 0) router.go(historyIndex) + if (breadcrumb.to) { + router.replace(breadcrumb.to) + } + } + + const canUseBreadcrumbHistory = (steps: number) => { + if (steps <= 0 || typeof history === "undefined") return false + + const state = history.state as { + back?: unknown + position?: unknown + } | null + const backPath = state?.back + + return ( + typeof state?.position === "number" && + state.position >= steps && + typeof backPath === "string" && + backPath.startsWith("/home/seller/myListings") + ) }