|
|
@@ -24,6 +24,86 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
+ <!-- 配送方式选择 -->
|
|
|
+ <view class="section" v-if="deliveryMethod > 1">
|
|
|
+ <text class="section-title">{{ deliveryMethodLabel(deliveryMethod) }}</text>
|
|
|
+ <!-- 自提/线上服务区域 -->
|
|
|
+ <view v-if="deliveryMethod === 2 || deliveryMethod === 3">
|
|
|
+ <view class="delivery-sub-label">自取地点</view>
|
|
|
+ <view class="picker-row" @click="showPickupLocationPicker">
|
|
|
+ <text class="picker-value" v-if="selectedPickupLocation">{{ selectedPickupLocation.name }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择自取地点</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="selectedPickupLocation && selectedPickupLocation.timeSlots && selectedPickupLocation.timeSlots.length > 0" class="picker-row" @click="showTimeSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ selectedTimeSlot.startTime }} - {{ selectedTimeSlot.endTime }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择取货时间</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view v-if="deliveryMethod === 4">
|
|
|
+ <view class="picker-row" @click="showServicePersonPicker">
|
|
|
+ <text class="picker-value" v-if="selectedServicePerson">{{ selectedServicePerson.name }}({{ selectedServicePerson.title || '服务者' }})</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择服务者</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="selectedServicePerson" class="picker-row" @click="showOnlineSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ formatOnlineTime(selectedTimeSlot.startTime) }} - {{ formatOnlineTime(selectedTimeSlot.endTime) }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择服务时间</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view v-if="deliveryMethod === 5">
|
|
|
+ <view class="picker-row" @click="showOnlineSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ formatOnlineTime(selectedTimeSlot.startTime) }} - {{ formatOnlineTime(selectedTimeSlot.endTime) }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择预约时段</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 配送方式选择 -->
|
|
|
+ <view class="section" v-if="deliveryMethod > 1">
|
|
|
+ <text class="section-title">{{ deliveryMethodLabel(deliveryMethod) }}</text>
|
|
|
+ <!-- 自提/线上服务区域 -->
|
|
|
+ <view v-if="deliveryMethod === 2 || deliveryMethod === 3">
|
|
|
+ <view class="delivery-sub-label">自取地点</view>
|
|
|
+ <view class="picker-row" @click="showPickupLocationPicker">
|
|
|
+ <text class="picker-value" v-if="selectedPickupLocation">{{ selectedPickupLocation.name }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择自取地点</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="selectedPickupLocation && selectedPickupLocation.timeSlots && selectedPickupLocation.timeSlots.length > 0" class="picker-row" @click="showTimeSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ selectedTimeSlot.startTime }} - {{ selectedTimeSlot.endTime }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择取货时间</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view v-if="deliveryMethod === 4">
|
|
|
+ <view class="picker-row" @click="showServicePersonPicker">
|
|
|
+ <text class="picker-value" v-if="selectedServicePerson">{{ selectedServicePerson.name }}({{ selectedServicePerson.title || '服务者' }})</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择服务者</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="selectedServicePerson" class="picker-row" @click="showOnlineSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ formatOnlineTime(selectedTimeSlot.startTime) }} - {{ formatOnlineTime(selectedTimeSlot.endTime) }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择服务时间</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view v-if="deliveryMethod === 5">
|
|
|
+ <view class="picker-row" @click="showOnlineSlotPicker">
|
|
|
+ <text class="picker-value" v-if="selectedTimeSlot">{{ formatOnlineTime(selectedTimeSlot.startTime) }} - {{ formatOnlineTime(selectedTimeSlot.endTime) }}</text>
|
|
|
+ <text class="picker-placeholder" v-else>请选择预约时段</text>
|
|
|
+ <text class="picker-arrow">›</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
<!-- Purchase Info Section (when product requires it) -->
|
|
|
<view class="section" v-if="requiredFields.length > 0">
|
|
|
<text class="section-title">购买信息</text>
|
|
|
@@ -182,6 +262,113 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
+ <!-- 自取地点选择器 -->
|
|
|
+ <view class="modal-mask" v-if="showPickupLocationModal" @click="showPickupLocationModal=false">
|
|
|
+ <view class="picker-modal" @click.stop>
|
|
|
+ <view class="picker-header">
|
|
|
+ <text class="picker-title">选择自取地点</text>
|
|
|
+ <text class="picker-close" @click="showPickupLocationModal=false">关闭</text>
|
|
|
+ </view>
|
|
|
+ <scroll-view scroll-y class="picker-list">
|
|
|
+ <view
|
|
|
+ v-for="(loc, idx) in pickupLocations"
|
|
|
+ :key="loc.id"
|
|
|
+ class="picker-item"
|
|
|
+ :class="selectedPickupLocation && selectedPickupLocation.id === loc.id ? 'picker-item-active' : ''"
|
|
|
+ @click="selectPickupLocation(loc)"
|
|
|
+ >
|
|
|
+ <view class="picker-item-left">
|
|
|
+ <text class="picker-item-name">{{ loc.name }}</text>
|
|
|
+ <text class="picker-item-addr">{{ loc.address }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="picker-item-check" v-if="selectedPickupLocation && selectedPickupLocation.id === loc.id">
|
|
|
+ <text class="check-icon">✓</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 时间段选择器 -->
|
|
|
+ <view class="modal-mask" v-if="showTimeSlotModal" @click="showTimeSlotModal=false">
|
|
|
+ <view class="picker-modal" @click.stop>
|
|
|
+ <view class="picker-header">
|
|
|
+ <text class="picker-title">选择取货时间</text>
|
|
|
+ <text class="picker-close" @click="showTimeSlotModal=false">关闭</text>
|
|
|
+ </view>
|
|
|
+ <scroll-view scroll-y class="picker-list">
|
|
|
+ <view
|
|
|
+ v-for="(slot, idx) in (selectedPickupLocation && selectedPickupLocation.timeSlots) || []"
|
|
|
+ :key="slot.id"
|
|
|
+ class="picker-item"
|
|
|
+ :class="selectedTimeSlot && selectedTimeSlot.id === slot.id ? 'picker-item-active' : ''"
|
|
|
+ @click="selectTimeSlot(slot)"
|
|
|
+ >
|
|
|
+ <view class="picker-item-left">
|
|
|
+ <text class="picker-item-name">{{ slot.startTime }} - {{ slot.endTime }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="picker-item-check" v-if="selectedTimeSlot && selectedTimeSlot.id === slot.id">
|
|
|
+ <text class="check-icon">✓</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 服务者选择器 -->
|
|
|
+ <view class="modal-mask" v-if="showServicePersonModal" @click="showServicePersonModal=false">
|
|
|
+ <view class="picker-modal" @click.stop>
|
|
|
+ <view class="picker-header">
|
|
|
+ <text class="picker-title">选择服务者</text>
|
|
|
+ <text class="picker-close" @click="showServicePersonModal=false">关闭</text>
|
|
|
+ </view>
|
|
|
+ <scroll-view scroll-y class="picker-list">
|
|
|
+ <view
|
|
|
+ v-for="(person, idx) in servicePersons"
|
|
|
+ :key="person.id"
|
|
|
+ class="picker-item"
|
|
|
+ :class="selectedServicePerson && selectedServicePerson.id === person.id ? 'picker-item-active' : ''"
|
|
|
+ @click="selectServicePerson(person)"
|
|
|
+ >
|
|
|
+ <view class="picker-item-left">
|
|
|
+ <text class="picker-item-name">{{ person.name }}</text>
|
|
|
+ <text class="picker-item-desc">{{ person.title || '' }}</text>
|
|
|
+ <text class="picker-item-price">{{ formatPriceWithSymbol(person.price) }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="picker-item-check" v-if="selectedServicePerson && selectedServicePerson.id === person.id">
|
|
|
+ <text class="check-icon">✓</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 线上时间段选择器 -->
|
|
|
+ <view class="modal-mask" v-if="showOnlineSlotModal" @click="showOnlineSlotModal=false">
|
|
|
+ <view class="picker-modal" @click.stop>
|
|
|
+ <view class="picker-header">
|
|
|
+ <text class="picker-title">选择服务时间</text>
|
|
|
+ <text class="picker-close" @click="showOnlineSlotModal=false">关闭</text>
|
|
|
+ </view>
|
|
|
+ <scroll-view scroll-y class="picker-list">
|
|
|
+ <view
|
|
|
+ v-for="slot in onlineTimeSlots"
|
|
|
+ :key="slot.id"
|
|
|
+ class="picker-item"
|
|
|
+ :class="selectedTimeSlot && selectedTimeSlot.id === slot.id ? 'picker-item-active' : ''"
|
|
|
+ @click="selectOnlineSlot(slot)"
|
|
|
+ >
|
|
|
+ <view class="picker-item-left">
|
|
|
+ <text class="picker-item-name">{{ formatOnlineTime(slot.startTime) }} - {{ formatOnlineTime(slot.endTime) }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="picker-item-check" v-if="selectedTimeSlot && selectedTimeSlot.id === slot.id">
|
|
|
+ <text class="check-icon">✓</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
<view class="bottom-bar">
|
|
|
<view class="bottom-left">
|
|
|
<text class="total-label">合计: </text>
|
|
|
@@ -199,7 +386,8 @@
|
|
|
|
|
|
<script>
|
|
|
import config from '@/config.js'
|
|
|
-import { getCouponList, addressList, getProductRequiredFields, getMyMembership } from '../../../utils/api.js'
|
|
|
+import { getCouponList, addressList, getProductRequiredFields, getMyMembership, productDetail } from '../../../utils/api.js'
|
|
|
+import { parseDate } from '@/utils/format.js'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
@@ -220,7 +408,21 @@ export default {
|
|
|
pointsUsed: 0,
|
|
|
userTotalPoints: 0,
|
|
|
pointsLoading: false,
|
|
|
- isMember: false
|
|
|
+ isMember: false,
|
|
|
+ // 配送配置
|
|
|
+ deliveryMethod: 1,
|
|
|
+ productDeliveryConfig: null,
|
|
|
+ pickupLocations: [],
|
|
|
+ selectedPickupLocation: null,
|
|
|
+ selectedTimeSlot: null,
|
|
|
+ servicePersons: [],
|
|
|
+ selectedServicePerson: null,
|
|
|
+ onlineSlots: [],
|
|
|
+ // 弹窗控制
|
|
|
+ showPickupLocationModal: false,
|
|
|
+ showTimeSlotModal: false,
|
|
|
+ showServicePersonModal: false,
|
|
|
+ showOnlineSlotModal: false
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -255,6 +457,15 @@ export default {
|
|
|
if (c.minSpend && c.minSpend > self.actualAmount) return false
|
|
|
return true
|
|
|
})
|
|
|
+ },
|
|
|
+ onlineTimeSlots() {
|
|
|
+ if (this.deliveryMethod === 4 && this.selectedServicePerson) {
|
|
|
+ return this.selectedServicePerson.slots || []
|
|
|
+ }
|
|
|
+ if (this.deliveryMethod === 5) {
|
|
|
+ return this.onlineSlots
|
|
|
+ }
|
|
|
+ return []
|
|
|
}
|
|
|
},
|
|
|
onLoad(options) {
|
|
|
@@ -283,6 +494,7 @@ export default {
|
|
|
this.loadRequiredFields()
|
|
|
this.loadCoupons()
|
|
|
this.loadUserPoints()
|
|
|
+ this.loadDeliveryConfig()
|
|
|
},
|
|
|
onShow() {
|
|
|
// 从地址选择/编辑页返回后重新加载地址列表
|
|
|
@@ -421,6 +633,97 @@ export default {
|
|
|
goAddAddress() {
|
|
|
uni.navigateTo({ url: '/pages/shop/address-edit/address-edit' })
|
|
|
},
|
|
|
+ // ========== 配送方式相关 ==========
|
|
|
+ loadDeliveryConfig() {
|
|
|
+ if (this.items.length === 0) return
|
|
|
+ var productId = this.items[0].productId
|
|
|
+ if (!productId) return
|
|
|
+ var stored = uni.getStorageSync('checkoutItems')
|
|
|
+ var storageData = stored && stored.length > 0 ? stored[0] : {}
|
|
|
+ var deliveryMethod = storageData.deliveryMethod
|
|
|
+ if (!deliveryMethod || deliveryMethod <= 1) return
|
|
|
+ this.deliveryMethod = deliveryMethod
|
|
|
+ this.productDeliveryConfig = storageData.deliveryConfig || null
|
|
|
+ // 如果来自产品详情,可能已有选中值
|
|
|
+ if (storageData.pickupLocationId) {
|
|
|
+ this.selectedPickupLocation = { id: storageData.pickupLocationId }
|
|
|
+ }
|
|
|
+ if (storageData.timeSlotId) {
|
|
|
+ this.selectedTimeSlot = { id: storageData.timeSlotId }
|
|
|
+ }
|
|
|
+ if (storageData.servicePersonId) {
|
|
|
+ this.selectedServicePerson = { id: storageData.servicePersonId }
|
|
|
+ }
|
|
|
+ // 加载完整配置
|
|
|
+ var that = this
|
|
|
+ productDetail({ id: productId }).then(function(res) {
|
|
|
+ if (res.code === 200 && res.data && res.data.deliveryConfig) {
|
|
|
+ that.productDeliveryConfig = res.data.deliveryConfig
|
|
|
+ that.deliveryMethod = res.data.deliveryMethod || that.deliveryMethod
|
|
|
+ that.pickupLocations = res.data.deliveryConfig.pickupLocations || []
|
|
|
+ that.servicePersons = res.data.deliveryConfig.servicePersons || []
|
|
|
+ that.onlineSlots = res.data.deliveryConfig.onlineSlots || []
|
|
|
+ }
|
|
|
+ }).catch(function() {})
|
|
|
+ },
|
|
|
+ onDeliveryMethodChange: function(e) {
|
|
|
+ this.deliveryMethod = parseInt(e.detail.value)
|
|
|
+ this.selectedPickupLocation = null
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ this.selectedServicePerson = null
|
|
|
+ },
|
|
|
+ onPickupLocationChange: function(e) {
|
|
|
+ var idx = parseInt(e.detail.value)
|
|
|
+ if (this.pickupLocations[idx]) {
|
|
|
+ this.selectedPickupLocation = this.pickupLocations[idx]
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onTimeSlotChange: function(e) {
|
|
|
+ var idx = parseInt(e.detail.value)
|
|
|
+ if (this.selectedPickupLocation && this.selectedPickupLocation.timeSlots && this.selectedPickupLocation.timeSlots[idx]) {
|
|
|
+ this.selectedTimeSlot = this.selectedPickupLocation.timeSlots[idx]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onServicePersonChange: function(e) {
|
|
|
+ var idx = parseInt(e.detail.value)
|
|
|
+ if (this.servicePersons[idx]) {
|
|
|
+ this.selectedServicePerson = this.servicePersons[idx]
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onOnlineSlotChange: function(e) {
|
|
|
+ var idx = parseInt(e.detail.value)
|
|
|
+ if (this.onlineSlots[idx]) {
|
|
|
+ this.selectedTimeSlot = this.onlineSlots[idx]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deliveryMethodLabel: function(method) {
|
|
|
+ var map = { 1: '快递配送', 2: '到店自提', 3: '快递/自提', 4: '线上服务', 5: '线上预约' }
|
|
|
+ return map[method] || '快递配送'
|
|
|
+ },
|
|
|
+ deliveryMethodHint: function(method) {
|
|
|
+ var map = { 1: '', 2: '请选择自取地点和时间段', 3: '请选择配送方式', 4: '请选择服务者和时间', 5: '请选择预约时段' }
|
|
|
+ return map[method] || ''
|
|
|
+ },
|
|
|
+ selectPickupLocation(loc) {
|
|
|
+ this.selectedPickupLocation = loc
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ this.showPickupLocationModal = false
|
|
|
+ },
|
|
|
+ selectTimeSlot(slot) {
|
|
|
+ this.selectedTimeSlot = slot
|
|
|
+ this.showTimeSlotModal = false
|
|
|
+ },
|
|
|
+ selectServicePerson(person) {
|
|
|
+ this.selectedServicePerson = person
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ this.showServicePersonModal = false
|
|
|
+ },
|
|
|
+ selectOnlineSlot(slot) {
|
|
|
+ this.selectedTimeSlot = slot
|
|
|
+ this.showOnlineSlotModal = false
|
|
|
+ }
|
|
|
loadUserPoints() {
|
|
|
var that = this
|
|
|
uni.request({
|
|
|
@@ -468,7 +771,11 @@ export default {
|
|
|
remark: this.remark,
|
|
|
addressId: that.selectedAddress.id,
|
|
|
purchaseInfo: that.purchaseForm,
|
|
|
- pointsUsed: that.pointsUsed
|
|
|
+ pointsUsed: that.pointsUsed,
|
|
|
+ deliveryMethod: that.deliveryMethod,
|
|
|
+ pickupLocationId: that.selectedPickupLocation ? that.selectedPickupLocation.id : null,
|
|
|
+ timeSlotId: that.selectedTimeSlot ? that.selectedTimeSlot.id : null,
|
|
|
+ servicePersonId: that.selectedServicePerson ? that.selectedServicePerson.id : null
|
|
|
},
|
|
|
header: {
|
|
|
'Content-Type': 'application/json',
|
|
|
@@ -508,6 +815,47 @@ export default {
|
|
|
}
|
|
|
return phone
|
|
|
},
|
|
|
+ selectServicePerson(person) {
|
|
|
+ this.selectedServicePerson = person
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ this.showServicePersonModal = false
|
|
|
+ },
|
|
|
+ selectOnlineSlot(slot) {
|
|
|
+ this.selectedTimeSlot = slot
|
|
|
+ this.showOnlineSlotModal = false
|
|
|
+ },
|
|
|
+ formatOnlineTime: function(timeStr) {
|
|
|
+ if (!timeStr) return ''
|
|
|
+ try {
|
|
|
+ var d = parseDate(timeStr)
|
|
|
+ if (!d) return timeStr
|
|
|
+ return (d.getMonth() + 1) + '月' + d.getDate() + '日 ' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0')
|
|
|
+ } catch (e) {
|
|
|
+ return timeStr
|
|
|
+ }
|
|
|
+ },
|
|
|
+ showPickupLocationPicker: function() {
|
|
|
+ this.showPickupLocationModal = true
|
|
|
+ },
|
|
|
+ showTimeSlotPicker: function() {
|
|
|
+ if (!this.selectedPickupLocation) return
|
|
|
+ this.showTimeSlotModal = true
|
|
|
+ },
|
|
|
+ showServicePersonPicker: function() {
|
|
|
+ this.showServicePersonModal = true
|
|
|
+ },
|
|
|
+ showOnlineSlotPicker: function() {
|
|
|
+ this.showOnlineSlotModal = true
|
|
|
+ },
|
|
|
+ selectPickupLocation(loc) {
|
|
|
+ this.selectedPickupLocation = loc
|
|
|
+ this.selectedTimeSlot = null
|
|
|
+ this.showPickupLocationModal = false
|
|
|
+ },
|
|
|
+ selectTimeSlot(slot) {
|
|
|
+ this.selectedTimeSlot = slot
|
|
|
+ this.showTimeSlotModal = false
|
|
|
+ }
|
|
|
getImageUrl: function(path) {
|
|
|
return config.API_BASE_URL + path
|
|
|
}
|
|
|
@@ -1029,4 +1377,124 @@ export default {
|
|
|
color: #67c23a;
|
|
|
margin-left: 8rpx;
|
|
|
}
|
|
|
+
|
|
|
+/* 配送方式选择 */
|
|
|
+.delivery-sub-label {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #999;
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+ margin-top: 16rpx;
|
|
|
+}
|
|
|
+.picker-row {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 20rpx 0;
|
|
|
+ border-bottom: 1rpx solid #f5f5f5;
|
|
|
+}
|
|
|
+.picker-row:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+}
|
|
|
+.picker-value {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+.picker-placeholder {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #999;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
+.picker-arrow {
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #ccc;
|
|
|
+ margin-left: 10rpx;
|
|
|
+}
|
|
|
+.modal-mask {
|
|
|
+ position: fixed;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background: rgba(0,0,0,0.5);
|
|
|
+ z-index: 999;
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-end;
|
|
|
+}
|
|
|
+.picker-modal {
|
|
|
+ width: 100%;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 24rpx 24rpx 0 0;
|
|
|
+ max-height: 70vh;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+.picker-modal .picker-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 30rpx;
|
|
|
+ border-bottom: 1rpx solid #eee;
|
|
|
+}
|
|
|
+.picker-modal .picker-title {
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+.picker-modal .picker-close {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #999;
|
|
|
+}
|
|
|
+.picker-modal .picker-list {
|
|
|
+ flex: 1;
|
|
|
+ max-height: 50vh;
|
|
|
+ padding: 20rpx 30rpx;
|
|
|
+}
|
|
|
+.picker-modal .picker-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 24rpx 0;
|
|
|
+ border-bottom: 1rpx solid #f5f5f5;
|
|
|
+}
|
|
|
+.picker-modal .picker-item:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-active {
|
|
|
+ background: #fff7e6;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 24rpx 16rpx;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-left {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-name {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-addr {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #999;
|
|
|
+ margin-top: 6rpx;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-desc {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #999;
|
|
|
+ margin-top: 4rpx;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-price {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #F97316;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-top: 4rpx;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.picker-modal .picker-item-check {
|
|
|
+ margin-left: 16rpx;
|
|
|
+ color: #F97316;
|
|
|
+ font-size: 32rpx;
|
|
|
+}
|
|
|
</style>
|