feat: add new features, update theme and build config

- Add 40+ new UI components including chat modules, discovery cards, photo galleries, FAQ and booking tools
- Standardize brand color across all styles by replacing $theme-color-500 SCSS variables with #0ccd58
- Add sass 1.58.3 dependency and update vite config for modern scss compiler support
- Refactor existing components (AddCarCrad, login page) and remove unused /quick/list router route
- Add utility functions for URL parameter handling
- Add static assets including custom znicons font, component images and icons
- Fix scss syntax issues and deprecation warnings
This commit is contained in:
duanshuwen
2026-05-26 22:49:52 +08:00
parent 548df7020c
commit ac8f5b5f64
159 changed files with 12439 additions and 629 deletions

View File

@@ -1,28 +1,17 @@
<template>
<div class="booking h-screen flex flex-col">
<TopNavBar
titleAlign="center"
:backgroundColor="$theme - color - 100"
backIconColor="#000"
:shadow="false"
>
<TopNavBar titleAlign="center" :backgroundColor="$theme - color - 100" backIconColor="#000" :shadow="false">
<template #title>
{{ GOODS_TYPE[orderData.orderType] }}
</template>
</TopNavBar>
<div
class="booking-content flex-full border-box p-12 overflow-hidden scroll-y"
>
<div class="booking-content flex-full border-box p-12 overflow-hidden scroll-y">
<!-- 预约内容 -->
<div class="border-box bg-white p-12 rounded-12 mb-12">
<!-- 酒店类型入住离店日期部分 -->
<DateRangeSection
v-if="orderData.orderType == 0"
:selectedDate="selectedDate"
:showBtn="true"
@click="navigateToDetail(orderData)"
/>
<DateRangeSection v-if="orderData.orderType == 0" :selectedDate="selectedDate" :showBtn="true"
@click="navigateToDetail(orderData)" />
<div class="font-size-16 font-500 color-000 line-height-24 ellipsis-1">
{{ orderData.commodityName }}
@@ -35,59 +24,33 @@
<!-- 权益部分 -->
<div class="flex flex-items-center mb-8">
<span
class="bg-F7F7F7 border-box rounded-4 font-size-11 color-525866 mr-4 pt-4 pb-4 pl-6 pr-6"
v-for="(item, index) in orderData.commodityFacilityList"
:key="index"
>
<span class="bg-F7F7F7 border-box rounded-4 font-size-11 color-525866 mr-4 pt-4 pb-4 pl-6 pr-6"
v-for="(item, index) in orderData.commodityFacilityList" :key="index">
{{ item }}
</span>
</div>
</div>
<div
class="border-box flex flex-items-center flex-justify-between pt-12"
>
<span class="font-size-12 color-525866 line-height-18"
>取消政策及说明</span
>
<div class="border-box flex flex-items-center flex-justify-between pt-12">
<span class="font-size-12 color-525866 line-height-18">取消政策及说明</span>
<div class="flex flex-items-center">
<span
class="font-size-12 theme-color-500 line-height-16"
@click="refundVisible = true"
>取消政策</span
>
<span class="font-size-12 theme-color-500 line-height-16" @click="refundVisible = true">取消政策</span>
<uni-icons type="right" size="15" color="#99A0AE" />
</div>
</div>
</div>
<!-- 非酒店类型 -->
<ContactSection
v-if="orderData.orderType != 0"
v-model="quantity"
:userFormList="userFormList"
v-model:reservationDate="selectedReservationDate"
:orderData="orderData"
/>
<ContactSection v-if="orderData.orderType != 0" v-model="quantity" :userFormList="userFormList"
v-model:reservationDate="selectedReservationDate" :orderData="orderData" />
<!-- 酒店类型 -->
<UserSection
v-if="orderData.orderType == 0"
v-model="quantity"
:userFormList="userFormList"
/>
<UserSection v-if="orderData.orderType == 0" v-model="quantity" :userFormList="userFormList" />
</div>
<!-- 底部 -->
<FooterSection
v-if="Object.keys(orderData).length"
v-model="quantity"
:selectedDate="selectedDate"
:orderData="orderData"
@detailClick="detailVisible = true"
@payClick="handlePayClick"
/>
<FooterSection v-if="Object.keys(orderData).length" v-model="quantity" :selectedDate="selectedDate"
:orderData="orderData" @detailClick="detailVisible = true" @payClick="handlePayClick" />
<!-- 取消政策弹窗 -->
<RefundPopup v-model="refundVisible" :orderData="orderData" />
@@ -99,7 +62,6 @@
<script setup>
import { ref, watch, nextTick } from "vue";
import { onLoad, onShow } from "@dcloudio/uni-app";
import TopNavBar from "@/components/TopNavBar/index.vue";
import DateRangeSection from "@/components/DateRangeSection/index.vue";
import ContactSection from "./components/ConactSection/index.vue";
@@ -160,19 +122,22 @@ watch(
{ immediate: false },
);
onLoad((options) => {
const { commodityId } = options;
getGoodsDetail(commodityId);
});
// TODO
onShow(() => {
const selectedDateStore = useSelectedDateStore();
// onLoad((options) => {
// const { commodityId } = options;
selectedDate.value.startDate = selectedDateStore.selectedDate.startDate;
selectedDate.value.endDate = selectedDateStore.selectedDate.endDate;
selectedDate.value.totalDays = selectedDateStore.selectedDate.totalDays;
});
// getGoodsDetail(commodityId);
// });
// onShow(() => {
// const selectedDateStore = useSelectedDateStore();
// selectedDate.value.startDate = selectedDateStore.selectedDate.startDate;
// selectedDate.value.endDate = selectedDateStore.selectedDate.endDate;
// selectedDate.value.totalDays = selectedDateStore.selectedDate.totalDays;
// });
const getGoodsDetail = async (commodityId) => {
const res = await goodsDetail({ commodityId });