2025-08-21 18:29:29 +08:00

1119 lines
32 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="service-detail-page" :style="{ paddingTop: (menu.bottom + 14) + 'px' }">
<!-- 服务区的信息 -->
<view class="serviceDetail" style="margin-top: 16rpx;">
<view class="detailTop">
<view class="serviceImg" v-if="info.fileId && info.fileId.length > 0">
<swiper scroll-x="true" circular="true" class="banner" indicator-dots="true" indicator-active-color="#272625"
autoplay interval="3000" style="width: 100%; height: 100%">
<swiper-item v-for="(img, i) in info.fileId" :key="i" style="width: 100%; height: 100%">
<image style="width: 100%; height: 100%" mode="aspectFill" lazy-load="true"
:src="'https://fwqznxj.yciccloud.com:9081/fileDownloadApi/bsys/document/docDownloadAction?fileId=' + img.fileID"
@click="handlePreview"></image>
</swiper-item>
</swiper>
</view>
</view>
<!-- 服务区基本信息 -->
<view class="detailBottom">
<view class="detailFirst">
<text class="serviceName">{{
info.SAName || ""
}}</text>
<text class="serviceStatus">营业中</text>
</view>
<view class="detailSecond">
<image class="detailFixedIcon" src="/static/images/home/address.png" />
<text class="address">
<text class="distance">{{ info.SERVERPART_DISTANCE || "-" }}km</text>
<text class="addressText">{{ info.belongRegion || "-" }}{{ info.belongLine || "-" }}</text>
</text>
</view>
<view class="navigationBox" @click="handleGoMap">
<image class="navigationIcon" src="/static/images/home/navigationIcon.svg" />
</view>
</view>
</view>
<!-- 主要内容区域 -->
<scroll-view scroll-y="true" class="content-scroll"
:style="{ height: `calc(100vh - ${(menu.bottom + 14)}px - 560rpx ) ` }">
<view class="content-container">
<!-- 基本信息卡片 -->
<view class="info-card">
<view class="card-header">
<text class="card-title">📋 基本信息</text>
</view>
<view class="info-grid">
<!-- <view class="info-item">
<text class="info-label">服务区编码</text>
<text class="info-value">{{ info.SACode || '-' }}</text>
</view> -->
<view class="info-item">
<text class="info-label">所属片区</text>
<text class="info-value">{{ info.belongArea || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">所在线路</text>
<text class="info-value">{{ info.belongLine || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">所在地区</text>
<text class="info-value">{{ info.belongRegion || '-' }}</text>
</view>
<!-- <view class="info-item">
<text class="info-label">桩号位置</text>
<text class="info-value">{{ info.pileNumLocation || '-' }}</text>
</view> -->
<view class="info-item">
<text class="info-label">经营模式</text>
<text class="info-value">{{ info.businessModel && info.businessModel.length > 0 ?
info.businessModel.toString() : '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">产权归属</text>
<text class="info-value">{{ info.propertyOwnership || '-' }}</text>
</view>
</view>
</view>
<!-- 面积信息卡片 -->
<view class="area-card">
<view class="card-header">
<text class="card-title">📏 面积信息</text>
</view>
<view class="area-stats">
<view class="stat-item">
<text class="stat-number">{{ formatArea(info.floorArea) }}</text>
<text class="stat-label">占地面积</text>
<text class="stat-unit"></text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-number">{{ formatArea(info.parkArea) }}</text>
<text class="stat-label">停车场面积</text>
<text class="stat-unit"></text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-number">{{ formatArea((info.synthesisCatering || 0) + (info.supermarket || 0) +
(info.synthesiOther || 0)) }}</text>
<text class="stat-label">综合楼面积</text>
<text class="stat-unit"></text>
</view>
</view>
</view>
<!-- 服务详情卡片 -->
<view class="service-card">
<!-- <view class="service-header">
<text class="service-title">🏢 {{ info.SAName || '服务区域' }}</text>
</view> -->
<!-- 服务信息 -->
<view class="service-section">
<view class="section-header">
<!-- <image class="section-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/serviceHotal.svg" /> -->
<text class="section-title">🚻 服务设施</text>
</view>
<view class="service-grid">
<view class="service-row">
<view class="service-item"
:class="{ 'available': info.manToiletNum > 0, 'unavailable': !info.manToiletNum }">
<image class="service-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/manWc.svg" />
<text class="service-name">男厕</text>
<text class="service-count" v-if="info.manToiletNum">({{ info.manToiletNum }})</text>
</view>
<view class="service-item"
:class="{ 'available': info.womanToiletNum > 0, 'unavailable': !info.womanToiletNum }">
<image class="service-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/womanWc.svg" />
<text class="service-name">女厕</text>
<text class="service-count" v-if="info.womanToiletNum">({{ info.womanToiletNum }})</text>
</view>
</view>
<view class="service-row">
<view class="service-item"
:class="{ 'available': info.otherWCNum > 0, 'unavailable': !info.otherWCNum }">
<text class="service-name">第三卫生间</text>
<text class="service-count" v-if="info.otherWCNum">({{ info.otherWCNum }})</text>
</view>
<view class="service-item"
:class="{ 'available': info.babyCareRoomNum > 0, 'unavailable': !info.babyCareRoomNum }">
<text class="service-name">母婴室</text>
<text class="service-count" v-if="info.babyCareRoomNum">({{ info.babyCareRoomNum }})</text>
</view>
</view>
<view class="service-row">
<view class="service-item" :class="{ 'available': info.faucetNum > 0, 'unavailable': !info.faucetNum }">
<text class="service-name">水龙头</text>
<text class="service-count" v-if="info.faucetNum">({{ info.faucetNum }})</text>
</view>
<view class="service-item"
:class="{ 'available': info.repairStationArea > 0, 'unavailable': !info.repairStationArea }">
<text class="service-name">汽修站</text>
</view>
</view>
<view class="service-row">
<view class="service-item"
:class="{ 'available': info.addWaterArea > 0, 'unavailable': !info.addWaterArea }">
<text class="service-name">加水区域</text>
</view>
<view class="service-item empty-item">
<!-- 空白项保持对齐 -->
</view>
</view>
</view>
</view>
<!-- 车位信息 -->
<view class="service-section">
<view class="section-header">
<!-- <image class="section-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/serviceCar.svg" /> -->
<text class="section-title">🚗 停车位</text>
</view>
<view class="parking-grid">
<view class="parking-row">
<view class="parking-item">
<text class="parking-label">小型车位</text>
<text class="parking-count">{{ info.minStallNum || 0 }}</text>
</view>
<view class="parking-item">
<text class="parking-label">中型车位</text>
<text class="parking-count">{{ info.middleStallNum || 0 }}</text>
</view>
</view>
<view class="parking-row">
<view class="parking-item">
<text class="parking-label">大型车位</text>
<text class="parking-count">{{ info.maxStallNum || 0 }}</text>
</view>
<view class="parking-item">
<text class="parking-label">加油车道</text>
<text class="parking-count">{{ info.addOilRoadNum || 0 }}</text>
</view>
</view>
</view>
</view>
<!-- 经营信息 -->
<view class="service-section">
<view class="section-header">
<!-- <image class="section-icon" src="https://eshangtech.com/ShopICO/ahyd-BID/service/serviceFood.svg" /> -->
<text class="section-title">🏪 经营服务</text>
</view>
<view class="business-grid">
<view class="business-row">
<view class="business-item"
:class="{ 'available': info.synthesisCatering > 0, 'unavailable': !info.synthesisCatering }">
<text class="business-name">餐饮服务</text>
<text class="business-count" v-if="info.synthesisCatering">({{ formatArea(info.synthesisCatering)
}}m²)</text>
</view>
<view class="business-item"
:class="{ 'available': info.supermarket > 0, 'unavailable': !info.supermarket }">
<text class="business-name">超市便利店</text>
<text class="business-count" v-if="info.supermarket">({{ formatArea(info.supermarket) }}m²)</text>
</view>
</view>
<view class="business-row">
<view class="business-item"
:class="{ 'available': info.LPGStationsArea > 0, 'unavailable': !info.LPGStationsArea }">
<text class="business-name">加气站</text>
<text class="business-count" v-if="info.LPGStationsArea">({{ formatArea(info.LPGStationsArea)
}}m²)</text>
</view>
<view class="business-item"
:class="{ 'available': info.chargingStationArea > 0, 'unavailable': !info.chargingStationArea }">
<text class="business-name">充电站</text>
<text class="business-count" v-if="info.chargingStationArea">({{ formatArea(info.chargingStationArea)
}}m²)</text>
</view>
</view>
</view>
<view class="business-type" v-if="info.businessModel && info.businessModel.length > 0">
<text class=" business-type-label">经营模式</text>
<view class="business-type-tag">
<text class="business-type-text">{{ info.businessModel && info.businessModel.length > 0 ?
info.businessModel.toString() : '-' }}</text>
</view>
</view>
</view>
</view>
<!-- 设施详情卡片 -->
<view class="info-card">
<view class="card-header">
<text class="card-title"> 设施详情</text>
</view>
<view class="info-grid">
<view class="info-item">
<text class="info-label">污水处理方量</text>
<text class="info-value">{{ info.sewageTreatmentVolume || '-' }}</text>
</view>
<view class="info-item">
<text class="info-label">变压器功率</text>
<text class="info-value">{{ info.transformerVA || '-' }}VA</text>
</view>
<view class="info-item">
<text class="info-label">加油枪数量</text>
<text class="info-value">{{ info.oilGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">充电桩数量</text>
<text class="info-value">{{ info.chargingStationPileNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">充电枪数量</text>
<text class="info-value">{{ info.chargingStationGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">直流快充枪</text>
<text class="info-value">{{ info.DCFastGunNum || 0 }}</text>
</view>
<view class="info-item">
<text class="info-label">直流慢充枪</text>
<text class="info-value">{{ info.slowGunNum || 0 }}</text>
</view>
</view>
</view>
<!-- 区域面积卡片 -->
<view class="info-card">
<view class="card-header">
<text class="card-title">🏗 区域面积 <text
style="font-size: 24rpx;font-weight: 400;margin-left: 8rpx;">/</text></text>
</view>
<view class="info-grid">
<view class="info-item">
<text class="info-label">行车道面积</text>
<text class="info-value">{{ formatArea(info.drivewayArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">办公区面积</text>
<text class="info-value">{{ formatArea(info.officeArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">卫生间面积</text>
<text class="info-value">{{ formatArea(info.WCArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">绿化面积</text>
<text class="info-value">{{ formatArea(info.greenArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">员工住宿区</text>
<text class="info-value">{{ formatArea(info.employeeRoomArea) }}</text>
</view>
<view class="info-item">
<text class="info-label">驾驶员休息室</text>
<text class="info-value">{{ formatArea(info.driverRoomArea) }}</text>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
import request from '@/util/index.js'
export default {
name: "mapDetail",
data() {
return {
info: {},
menu: {},
typeList: [
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/health.svg', name: 'A类', isShow: false },
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/time.svg', name: '2015-06-10', isShow: false },
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/baby.svg', name: '母婴室', isShow: false },
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/car.svg', name: '司机之家', isShow: false },
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/Charging.svg', name: '充电桩', isShow: false },
{ url: 'https://eshangtech.com/ShopICO/ahyd-BID/service/hotel.svg', name: '客房', isShow: false }
],
topBg: [],
seatInfo: {}
}
},
onLoad() {
this.menu = uni.getMenuButtonBoundingClientRect()
this.handleGetPageData()
},
props: {
selectIndex: {
type: Number,
default: 0
}
},
watch: {
selectIndex: {
handler(value) {
if (value === 0) {
this.handleGetPageData()
}
},
immediate: true,
}
},
methods: {
// 跳转导航
handleGoMap() {
uni.openLocation({
latitude: this.info.latitude * 1,
longitude: this.info.longitude * 1,
scale: 16,
name: this.info.SAName,
success(data) {
console.log(data);
},
fail(err) {
console.log(err);
},
});
},
// 改变服务区
handleChangeService() {
this.$util.toNextRoute("navigateTo", "/pages/map/index?type=attendanceStatus");
},
// 返回上一页
handleBack() {
uni.navigateBack({
delta: 1
})
},
// 获取页面数据
handleGetPageData() {
let systemInfo = uni.getSystemInfoSync()
this.menu = uni.getMenuButtonBoundingClientRect()
let seat = uni.getStorageSync('currentService')
// this.handleSearch(seat)
this.handleGetData(seat)
this.topBg = []
},
handleGetData(obj) {
// 模拟新数据结构的示例数据
let res = {
...obj,
// fileId: obj.fileId ? JSON.parse(obj.fileId) : [],
// businessModel: obj.businessModel ? JSON.parse(obj.businessModel) : [],
}
console.log('新数据结构示例:', res);
this.info = res
},
// 搜索服务区信息
async handleSearch(seat) {
let currentService = uni.getStorageSync("currentService");
let seatInfo = uni.getStorageSync("seatInfo");
this.seatInfo = JSON.parse(seatInfo);
let reqs = {
longitude: this.seatInfo.longitude,
ServerpartId: currentService.Serverpart_ID || currentService.SERVERPART_ID,
latitude: this.seatInfo.latitude,
}
try {
const totalData = await request.$webGet('CommercialApi/BaseInfo/GetServerpartInfo', reqs)
this.info = totalData.Result_Data
// 设置设施显示状态
this.typeList[4].isShow = this.info.HASCHARGE
this.typeList[5].isShow = this.info.HASGUESTROOM
this.typeList[2].isShow = this.info.HASMOTHER
this.typeList[3].isShow = this.info.HASPILOTLOUNGE
if (this.info.SERVERPART_TYPE) {
this.typeList[0].name = this.getServiceType(this.info.SERVERPART_TYPE)
this.typeList[0].isShow = true
}
this.typeList[1].isShow = this.info.STARTDATE
// 设置图片
if (this.info && this.info.ImageLits && this.info.ImageLits.length > 0) {
this.topBg = this.info.ImageLits
} else {
this.topBg = ['https://eshangtech.com/ShopICO/ahyd-BID/service/default.png']
}
} catch (error) {
console.error('获取服务区信息失败:', error)
}
},
// 获取服务区类型
getServiceType(type) {
const typeMap = {
1000: 'A类',
1010: 'A类示范',
2000: 'B类',
3000: 'C类',
4000: 'D类'
}
return typeMap[type] || ''
},
// 格式化面积
formatArea(area) {
if (!area) return '-'
return parseFloat(area).toLocaleString()
},
// 预览图片
handlePreview() {
uni.previewImage({
current: this.topBg[0],
urls: this.topBg
})
},
}
}
</script>
<style lang="less" scoped>
@bg: #f8f9fa;
@muted: #666;
@card: #fff;
@shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
@primary: #27B25F;
@primary2: #4CCC7F;
@ok: #2ed573;
@warn: #ff9f43;
@danger: #ff4757;
.service-detail-page {
width: 100vw;
background-color: #F5F5F5;
box-sizing: border-box;
padding-bottom: env(safe-area-inset-bottom);
.summaryTab {
position: fixed;
left: 0;
top: 0;
width: 100vw;
background-image: url("https://eshangtech.com/minTestImg/pageBg.png");
z-index: 99;
display: flex;
align-items: center;
box-sizing: border-box;
padding-bottom: 16px;
.leftArrow {
width: 100%;
height: 24px;
position: absolute;
z-index: 99999999999;
box-sizing: border-box;
display: flex;
align-items: center;
padding: 0 32rpx;
.img {
width: 24px;
height: 24px;
margin-right: 8px;
z-index: 99;
}
.picker {
.selectService {
display: flex;
align-items: center;
.img {
width: 40px;
height: 40px;
z-index: 2;
}
.select {
height: 32px;
background: #fff;
border-radius: 0 16px 16px 0;
transform: translateX(-40px);
box-sizing: border-box;
padding-left: 35px;
padding-right: 8rpx;
display: flex;
align-items: center;
.content {
display: flex;
flex-direction: column;
align-items: flex-start;
.uni-input {
padding: 0;
background: transparent;
font-size: 14px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #160002;
line-height: 20px;
height: 20px;
}
.area {
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #786B6C;
line-height: 16px;
margin: 0;
}
}
}
}
}
}
}
.serviceDetail {
width: calc(100% - 64rpx);
height: 440rpx;
background: #ffffff;
border-radius: 16rpx;
margin-left: 32rpx;
.detailTop {
width: 100%;
height: 320rpx;
border-radius: 16rpx;
overflow: hidden;
.serviceImg {
width: 100%;
height: 100%;
}
}
.detailBottom {
width: 100%;
box-sizing: border-box;
padding: 4rpx 24rpx 24rpx;
position: relative;
.detailFirst {
width: 100%;
.serviceName {
width: calc(100% - 190rpx);
font-family: PingFangSC, PingFang SC;
font-weight: 600;
font-size: 28rpx;
color: #130f05;
line-height: 36rpx;
text-align: left;
font-style: normal;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin-right: 16rpx;
}
.serviceStatus {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 24rpx;
color: #009f43;
line-height: 32rpx;
text-align: justify;
font-style: normal;
display: inline-block;
padding: 2rpx 6rpx;
background: #e9f8ee;
border-radius: 4rpx;
}
}
.detailSecond {
width: 100%;
display: flex;
align-items: center;
.detailFixedIcon {
width: 24rpx;
height: 24rpx;
margin-right: 4rpx;
}
.address {
width: calc(100% - 120rpx);
display: inline-block;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
.distance {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 24rpx;
color: #130f05;
line-height: 36rpx;
text-align: left;
font-style: normal;
margin-right: 8rpx;
}
.addressText {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 24rpx;
color: #716f69;
line-height: 36rpx;
text-align: left;
font-style: normal;
}
}
}
.navigationBox {
width: 64rpx;
height: 64rpx;
position: absolute;
right: 24rpx;
top: 32rpx;
.navigationIcon {
width: 100%;
height: 100%;
}
}
}
}
.content-scroll {
background: @bg;
// margin-top: 24rpx;
}
.content-container {
padding: 32rpx;
}
.service-info {
background: #fff;
margin: 24rpx 32rpx 0;
border-radius: 24rpx;
padding: 40rpx;
box-shadow: @shadow;
.service-name-row {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
.service-name {
font-size: 36rpx;
font-weight: 700;
color: #160002;
flex: 1;
}
.status-badge {
background: linear-gradient(135deg, @primary, @primary2);
padding: 8rpx 20rpx;
border-radius: 20rpx;
.status-text {
font-size: 24rpx;
font-weight: 500;
color: #fff;
}
}
}
.service-location {
margin-bottom: 32rpx;
.location-text {
font-size: 28rpx;
color: #786B6C;
line-height: 1.4;
}
}
.nav-button-row {
.nav-button {
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, @primary, @primary2);
color: #fff;
padding: 24rpx;
border-radius: 20rpx;
gap: 16rpx;
.nav-icon {
width: 28rpx;
height: 28rpx;
filter: brightness(0) invert(1);
}
.nav-text {
font-size: 28rpx;
font-weight: 600;
}
}
}
}
.info-card,
.area-card {
background: #fff;
border-radius: 24rpx;
padding: 24rpx 24rpx 16rpx;
margin-bottom: 32rpx;
box-shadow: @shadow;
.card-header {
display: flex;
align-items: center;
margin-bottom: 8rpx;
.header-icon {
width: 48rpx;
height: 48rpx;
background: linear-gradient(135deg, @primary, @primary2);
border-radius: 12rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
.icon {
width: 24rpx;
height: 24rpx;
filter: brightness(0) invert(1);
}
}
.card-title {
font-size: 28rpx;
font-weight: 600;
color: #160002;
}
}
.info-grid {
.info-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16rpx 0;
border-bottom: 2rpx solid #F5F5F5;
&:last-child {
border-bottom: none;
}
.info-label {
font-size: 24rpx;
color: #786B6C;
font-weight: 400;
}
.info-value {
font-size: 24rpx;
color: #160002;
font-weight: 600;
text-align: right;
flex: 1;
margin-left: 30rpx;
}
}
}
.area-stats {
display: flex;
align-items: center;
justify-content: space-between;
.stat-item {
flex: 1;
text-align: center;
.stat-number {
display: block;
font-size: 28rpx;
font-weight: 600;
color: @primary;
margin-bottom: 8rpx;
}
.stat-label {
display: block;
font-size: 24rpx;
color: #786B6C;
margin-bottom: 4rpx;
}
.stat-unit {
font-size: 22rpx;
color: #A69E9F;
}
}
.stat-divider {
width: 2rpx;
height: 80rpx;
background: #E5E5E5;
margin: 0 32rpx;
}
}
}
.service-card {
background: #fff;
border-radius: 24rpx;
padding: 24rpx;
margin-bottom: 32rpx;
box-shadow: @shadow;
.service-header {
margin-bottom: 16rpx;
.service-title {
font-size: 32rpx;
font-weight: 700;
color: #160002;
}
}
.service-section {
margin-bottom: 24rpx;
&:last-child {
margin-bottom: 0;
}
.section-header {
display: flex;
align-items: center;
margin-bottom: 24rpx;
.section-icon {
width: 32rpx;
height: 32rpx;
margin-right: 16rpx;
}
.section-title {
font-size: 28rpx;
font-weight: 600;
color: #160002;
}
}
.service-grid {
.service-row {
display: flex;
gap: 16rpx;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
.service-item {
flex: 1;
display: flex;
align-items: center;
background: #F0F0F0;
padding: 16rpx;
border-radius: 16rpx;
border: 3rpx solid transparent;
&.available {
background: linear-gradient(135deg, rgba(@primary, 0.15), rgba(@primary2, 0.1));
border: 3rpx solid @primary;
box-shadow: 0 4rpx 12rpx rgba(@primary, 0.2);
}
&.unavailable {
.service-name {
text-decoration: line-through;
color: #999;
}
}
&.empty-item {
background: transparent;
border: none;
box-shadow: none;
}
.service-icon {
width: 28rpx;
height: 28rpx;
margin-right: 12rpx;
}
.service-name {
font-size: 24rpx;
color: #160002;
font-weight: 500;
flex: 1;
}
.service-count {
font-size: 20rpx;
color: #786B6C;
margin-left: 8rpx;
}
}
}
.parking-grid {
.parking-row {
display: flex;
gap: 16rpx;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
.parking-item {
flex: 1;
background: #F8F9FA;
border-radius: 20rpx;
padding: 12rpx 16rpx;
text-align: center;
.parking-icon {
width: 56rpx;
height: 56rpx;
margin: 0 auto 20rpx;
border-radius: 16rpx;
&.car-icon {
background: linear-gradient(135deg, #FF6B6B, #FF8787);
}
&.bus-icon {
background: linear-gradient(135deg, #4ECDC4, #6BCDB9);
}
&.truck-icon {
background: linear-gradient(135deg, #45B7D1, #5DBBCC);
}
&.danger-icon {
background: linear-gradient(135deg, #FFA726, #FFB74D);
}
}
.parking-label {
display: block;
font-size: 24rpx;
color: #786B6C;
}
.parking-count {
font-size: 28rpx;
font-weight: 700;
color: #160002;
}
}
}
.business-grid {
margin-bottom: 24rpx;
.business-row {
display: flex;
gap: 16rpx;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
}
.business-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
background: #F0F0F0;
padding: 12rpx 20rpx;
border-radius: 16rpx;
border: 3rpx solid transparent;
&.available {
background: linear-gradient(135deg, rgba(#1677FE, 0.15), rgba(#1677FE, 0.1));
border: 3rpx solid #1677FE;
box-shadow: 0 4rpx 12rpx rgba(#1677FE, 0.2);
}
&.unavailable {
.business-name {
text-decoration: line-through;
color: #999;
}
}
.business-name {
font-size: 24rpx;
color: #160002;
font-weight: 400;
text-align: center;
}
.business-count {
font-size: 20rpx;
color: #786B6C;
margin-left: 8rpx;
}
}
}
.business-type {
display: flex;
align-items: center;
.business-type-label {
font-size: 24rpx;
color: #786B6C;
margin-right: 16rpx;
}
.business-type-tag {
background: linear-gradient(135deg, @primary, @primary2);
padding: 8rpx 20rpx;
border-radius: 20rpx;
.business-type-text {
font-size: 24rpx;
color: white;
font-weight: 500;
}
}
}
}
}
}
</style>