feat(pricing): introduce real-time budget estimator

This commit introduces a real-time budget estimator for event services. A new summary sidebar now displays a live,
itemized breakdown of costs as the user selects options in the order form.

Key changes include:
- A new `OrderSummary` component to display the price breakdown and total.
- Comprehensive pricing logic implemented in the `useEventOrder` composable.
- A responsive two-column layout on the main page to accommodate the summary.
- UI/UX improvements across the form, including clearer labels and subtle transition animations for conditional fields.
This commit is contained in:
xiaomai
2025-10-16 21:14:44 +08:00
parent eb69f6c48e
commit a5ac00baa1
12 changed files with 449 additions and 136 deletions

View File

@@ -1,40 +1,49 @@
<template>
<UCard>
<template #header>
<h2 class="text-xl font-bold">{{ secIdx }}. 宴会竞标大屏</h2>
<h2 class="text-xl font-bold">{{ secIdx }}. 竞标大屏系统</h2>
<p class="text-muted text-sm">
自研竞标展示系统全马首创适用于宴会活动庆典等场合具备实时竞标显示功能
</p>
</template>
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4 items-center">
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
<UCheckbox
v-model="orderState.biddingSystem"
label="订阅服务"
label="需要"
description="包含图片处理 & 宴会当日技术支持(场控 / 协调)"
/>
<UCheckbox
v-model="orderState.biddingSystemProvideImage"
label="提供照片?"
description="活动方将发送标品图片给予本工作室"
:class="[orderState.biddingSystem ? '' : 'opacity-0']"
:disabled="!orderState.biddingSystem"
/>
<UFormField
name="estimatedBidItemCount"
label="标品数量预估"
:class="[orderState.biddingSystem ? '' : 'opacity-0']"
>
<USelect
v-model="orderState.estimatedBidItemCount"
:items="itemCountRanges"
placeholder="请选择预估数量区间"
:class="['w-full']"
:disabled="!orderState.biddingSystem"
<Transition name="fade">
<USwitch
v-if="orderState.biddingSystem"
v-model="orderState.biddingSystemProvideImage"
:label="
orderState.biddingSystemProvideImage ? '素材自备' : '请求拍摄'
"
:description="
orderState.biddingSystemProvideImage
? '您提供图片(我们进行后处理)'
: '我们需要到您单位去拍摄标品'
"
/>
</UFormField>
</Transition>
<Transition name="fade">
<UFormField
v-if="orderState.biddingSystem"
name="estimatedBidItemCount"
label="估算件数"
description="不影响计价"
>
<USelect
v-model="orderState.estimatedBidItemCount"
:items="itemCountRanges"
placeholder="请选择件数区间"
:class="['w-full']"
/>
</UFormField>
</Transition>
</div>
</UCard>
</template>