feat(mini-app): 实现玩法、管家页面与首页组件化重构

- 新增管家服务全套页面、组件与模拟数据
- 新增玩法分类页面与线路展示组件
- 重构首页为可复用组件模块
- 更新路由配置替换旧目的地页面路由
- 移除废弃页面与客服弹窗冗余逻辑
- 更新项目文档与gitignore配置
This commit is contained in:
duanshuwen committed 2026-08-11 22:05:22 +08:00
1 parent d153ba7790
commit 16caad1c40
41 files changed
+1016 -1372

No files matched your search

+2 -7
View File
@@ -9,7 +9,6 @@
<button class="tap-feedback m-0 h-11 w-11 rounded-full bg-black/30 p-0 text-[28px] leading-none text-white backdrop-blur" @click="goBack()">‹</button>
<view class="flex gap-2">
<button class="tap-feedback m-0 h-11 min-w-[48px] rounded-full bg-black/30 px-3 text-[12px] font-semibold text-white backdrop-blur" @click="toggleFavorite">{{ favorite ? "已藏" : "收藏" }}</button>
<button class="tap-feedback m-0 h-11 min-w-[48px] rounded-full bg-black/30 px-3 text-[12px] font-semibold text-white backdrop-blur" @click="supportOpen = true">管家</button>
</view>
</view>
<view class="absolute bottom-8 left-0 right-0 px-5">
@@ -70,12 +69,10 @@
</view>
</scroll-view>
<view class="fixed bottom-0 left-1/2 z-40 flex w-full max-w-[430px] -translate-x-1/2 items-center gap-3 border-t border-[#245c45]/10 bg-[#fffaf2]/95 px-4 pb-[calc(12px+env(safe-area-inset-bottom))] pt-3 shadow-[0_-14px_32px_rgba(31,44,37,0.1)] backdrop-blur">
<button class="secondary-action tap-feedback m-0 flex-1 text-[14px] font-semibold" @click="supportOpen = true">服务管家</button>
<button class="primary-action tap-feedback m-0 flex-[1.4] text-[15px] font-bold" @click="goBooking(product)">预订咨询</button>
<view class="fixed bottom-0 left-1/2 z-40 flex w-full max-w-[430px] -translate-x-1/2 items-center justify-end gap-3 border-t border-[#245c45]/10 bg-[#fffaf2]/95 px-4 pb-[calc(12px+env(safe-area-inset-bottom))] pt-3 shadow-[0_-14px_32px_rgba(31,44,37,0.1)] backdrop-blur">
<button class="primary-action tap-feedback m-0 w-full text-[15px] font-bold" @click="goBooking(product)">预订咨询</button>
</view>
</view>
<SupportSheet :open="supportOpen" @close="supportOpen = false" />
</AppShell>
</template>
@@ -85,7 +82,6 @@ import { onLoad, onShow } from "@dcloudio/uni-app";
import AppShell from "@/components/AppShell.vue";
import ProductList from "@/components/ProductList.vue";
import SectionHeading from "@/components/SectionHeading.vue";
import SupportSheet from "@/components/SupportSheet.vue";
import { formatWan, getDetailMeta, getProductDetailSections, productKey, stripTitle } from "@/lib/data";
import { goBack, goBooking, goDetail } from "@/lib/navigation";
import { appState, findProduct, isProductFavorite, loadAppData, rememberProduct, toggleFavoriteProduct } from "@/lib/store";
@@ -93,7 +89,6 @@ import type { Product } from "@/lib/types";
const product = ref<Product>(findProduct());
const activeTab = ref("overview");
const supportOpen = ref(false);
onLoad((query) => {
product.value = findProduct(typeof query?.product === "string" ? decodeURIComponent(query.product) : undefined);