|
@@ -5,12 +5,12 @@
|
|
|
<up-card
|
|
|
title="服务描述"
|
|
|
:thumb="thumb"
|
|
|
- :head-style="{ height: '80rpx', padding: '20rpx' }"
|
|
|
+ :head-style="{ height: '80rpx', padding: '20rpx', fontWeight: 'bold' }"
|
|
|
>
|
|
|
<template #body>
|
|
|
<view class="service-description-container">
|
|
|
<view class="service-text">{{ listData.businessDescribe }}</view>
|
|
|
- <view class="service-price">¥{{ listData.businessPrice }}</view>
|
|
|
+ <view class="service-price-tag">¥{{ listData.businessPrice }}</view>
|
|
|
</view>
|
|
|
</template>
|
|
|
</up-card>
|
|
@@ -18,37 +18,46 @@
|
|
|
<view>
|
|
|
<up-card
|
|
|
title="志愿者介绍"
|
|
|
- :head-style="{ height: '80rpx', padding: '20rpx' }"
|
|
|
+ :head-style="{ height: '80rpx', padding: '20rpx', fontWeight: 'bold' }"
|
|
|
>
|
|
|
<template #body>
|
|
|
- <view class="card-container">
|
|
|
+ <view class="volunteer-card">
|
|
|
<!-- 左侧图片 -->
|
|
|
<image
|
|
|
- class="card-image"
|
|
|
+ class="volunteer-image"
|
|
|
:src="listData.volunteerPicture"
|
|
|
mode="aspectFill"
|
|
|
></image>
|
|
|
|
|
|
<!-- 中间信息(姓名/类别等) -->
|
|
|
- <view class="card-info">
|
|
|
- <view class="info-item">姓名:{{ listData.name }}</view>
|
|
|
- <view class="info-item"
|
|
|
- >服务项目:{{ listData.businessTierName }}</view
|
|
|
- >
|
|
|
- <view v-if="serviceSubjectName != null" class="info-item"
|
|
|
- >类别:{{ listData.projectTypeName }}
|
|
|
+ <view class="volunteer-info">
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">姓名:</text>
|
|
|
+ <text class="info-value">{{ listData.name }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">服务项目:</text>
|
|
|
+ <text class="info-value">{{ listData.businessTierName }}</text>
|
|
|
+ </view>
|
|
|
+ <view v-if="serviceSubjectName != null" class="info-row">
|
|
|
+ <text class="info-label">类别:</text>
|
|
|
+ <text class="info-value">{{ listData.projectTypeName }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">服务时长:</text>
|
|
|
+ <text class="info-value">{{ listData.businessDuration }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">电话:</text>
|
|
|
+ <text class="info-value">{{ listData.phonenumber }}</text>
|
|
|
</view>
|
|
|
- <view class="Telephone"
|
|
|
- >服务时长:{{ listData.businessDuration }}</view
|
|
|
- >
|
|
|
- <view class="Telephone"
|
|
|
- >次/件:{{ listData.minQuantity + listData.businessUnit }}</view
|
|
|
- >
|
|
|
- <view class="Telephone">电话:{{ listData.phonenumber }}</view>
|
|
|
</view>
|
|
|
|
|
|
- <!-- 右上角评分 - 使用绝对定位 -->
|
|
|
- <view class="card-rating">4.5 评分</view>
|
|
|
+ <!-- 右上角评分 -->
|
|
|
+ <view class="volunteer-rating">
|
|
|
+ <text class="rating-text">4.5</text>
|
|
|
+ <text class="rating-label">评分</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</template>
|
|
|
</up-card>
|
|
@@ -56,10 +65,12 @@
|
|
|
<up-card
|
|
|
title="技能介绍"
|
|
|
:thumb="thumb"
|
|
|
- :head-style="{ height: '80rpx', padding: '20rpx' }"
|
|
|
+ :head-style="{ height: '80rpx', padding: '20rpx', fontWeight: 'bold' }"
|
|
|
>
|
|
|
<template #body>
|
|
|
- {{ listData.skillDescribe }}
|
|
|
+ <view class="skill-description">
|
|
|
+ {{ listData.skillDescribe }}
|
|
|
+ </view>
|
|
|
</template>
|
|
|
</up-card>
|
|
|
<up-card
|
|
@@ -95,73 +106,79 @@
|
|
|
<!-- 底部第一层弹框 -->
|
|
|
<view>
|
|
|
<up-popup :show="show" @close="close" @open="open"> </up-popup>
|
|
|
- <up-popup v-model:show="show" @open="upPopupOpen">
|
|
|
- <view>
|
|
|
- <view class="Wrapper">
|
|
|
- <image src="/static/img/Location.png" class="Wrapper-img" />
|
|
|
- <span class="Wrapper-content">李四</span>
|
|
|
- <span class="Wrapper-content">重庆永川区</span>
|
|
|
+ <up-popup :show="show" @open="upPopupOpen" :custom-style="popupStyle">
|
|
|
+ <scroll-view scroll-y class="popup-scroll-content">
|
|
|
+ <view>
|
|
|
+ <view class="Wrapper">
|
|
|
+ <image src="/static/img/Location.png" class="Wrapper-img" />
|
|
|
+ <span class="Wrapper-content">李四</span>
|
|
|
+ <span class="Wrapper-content">重庆永川区</span>
|
|
|
+ </view>
|
|
|
+ <span style="margin-left: 15rpx; margin-top: 50rpx">重庆永川区</span>
|
|
|
</view>
|
|
|
- <span style="margin-left: 15rpx; margin-top: 50rpx">重庆永川区</span>
|
|
|
- </view>
|
|
|
- <up-divider></up-divider>
|
|
|
- <view class="Wrap-content1">
|
|
|
- <up-avatar :src="src"></up-avatar>
|
|
|
- <text style="margin-top: 15rpx">¥{{ businessPrice }}</text>
|
|
|
- </view>
|
|
|
- <view class="Wrap-info">
|
|
|
- <text style="margin-left: 10rpx">服务类别:</text>
|
|
|
- <up-text type="info" text="家庭教育"></up-text>
|
|
|
- </view>
|
|
|
- <view class="Wrap-info">
|
|
|
- <text style="margin-left: 10rpx">上门服务次数:</text>
|
|
|
- <up-number-box
|
|
|
- :modelValue="singleQuantity"
|
|
|
- :min="listData.minQuantity"
|
|
|
- :max="minQuantityMax"
|
|
|
- @change="valChange"
|
|
|
- ></up-number-box>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view class="Wrap-info">
|
|
|
- <text style="margin-left: 10rpx">购买规格:</text>
|
|
|
- <view>{{ listData.minQuantity + listData.businessUnit }}</view>
|
|
|
- </view>
|
|
|
- <view class="Wrap-content3">
|
|
|
- <text style="margin-left: 15rpx">服务周期:</text>
|
|
|
- <view style="margin-top: 25rpx">
|
|
|
- <uniDatetimePickerMy
|
|
|
- :modelValue="doorToDoorTime"
|
|
|
- :start="startDisabled"
|
|
|
- :end="endDisabled"
|
|
|
- type="daterange"
|
|
|
- ></uniDatetimePickerMy>
|
|
|
+ <up-divider></up-divider>
|
|
|
+ <view class="Wrap-content1">
|
|
|
+ <up-avatar :src="src"></up-avatar>
|
|
|
+ <text class="service-price">¥{{ businessPrice }}</text>
|
|
|
</view>
|
|
|
- <view>
|
|
|
- <its-calendar
|
|
|
- v-if="show"
|
|
|
- ref="itsCalendarRef"
|
|
|
- :businessDuration="listData.businessDuration"
|
|
|
- :minQuantity="singleQuantity"
|
|
|
- :timeArr="doorToDoorTimeArr"
|
|
|
- :timeHostArr="timeHostArr"
|
|
|
- :projectName="listData.projectName"
|
|
|
- @getByDate="getByDate"
|
|
|
- @getByTime="getByTime"
|
|
|
- ></its-calendar>
|
|
|
+ <view class="service-info-item">
|
|
|
+ <text class="service-label">服务类别:</text>
|
|
|
+ <up-text type="info" class="service-value" text="家庭教育"></up-text>
|
|
|
</view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <view class="Wrap-content6">
|
|
|
- <text style="margin-left: 15rpx">备注:</text>
|
|
|
- <up-input
|
|
|
- placeholder="请输入内容"
|
|
|
- border="surround"
|
|
|
- v-model="remark"
|
|
|
- @change="change"
|
|
|
- ></up-input>
|
|
|
- </view>
|
|
|
- <view class="Wrap-detils-btn">
|
|
|
+ <view class="service-info-item">
|
|
|
+ <text class="service-label">上门服务次数:</text>
|
|
|
+ <up-number-box
|
|
|
+ :modelValue="singleQuantity"
|
|
|
+ :min="listData.minQuantity"
|
|
|
+ :max="minQuantityMax"
|
|
|
+ class="service-number-box"
|
|
|
+ @change="valChange"
|
|
|
+ ></up-number-box>
|
|
|
+ </view>
|
|
|
+ <view class="service-info-item">
|
|
|
+ <text class="service-label">购买规格:</text>
|
|
|
+ <view class="service-value">{{ listData.minQuantity + listData.businessUnit }}</view>
|
|
|
+ </view>
|
|
|
+ <view class="service-period">
|
|
|
+ <text class="service-label">服务周期:</text>
|
|
|
+ <view class="date-picker-container">
|
|
|
+ <uniDatetimePickerMy
|
|
|
+ :modelValue="doorToDoorTime"
|
|
|
+ :start="startDisabled"
|
|
|
+ :end="endDisabled"
|
|
|
+ type="daterange"
|
|
|
+ ></uniDatetimePickerMy>
|
|
|
+ </view>
|
|
|
+ <view>
|
|
|
+ <its-calendar
|
|
|
+ v-if="show"
|
|
|
+ ref="itsCalendarRef"
|
|
|
+ :businessDuration="listData.businessDuration"
|
|
|
+ :minQuantity="singleQuantity"
|
|
|
+ :timeArr="doorToDoorTimeArr"
|
|
|
+ :timeHostArr="timeHostArr"
|
|
|
+ :businessTierName="listData.businessTierName"
|
|
|
+ class="calendar-component"
|
|
|
+ @getByDate="getByDate"
|
|
|
+ @getByTime="getByTime"
|
|
|
+ ></its-calendar>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="remark-container">
|
|
|
+ <text class="service-label">备注:</text>
|
|
|
+ <up-input
|
|
|
+ placeholder="请输入内容"
|
|
|
+ border="surround"
|
|
|
+ v-model="remark"
|
|
|
+ class="remark-input"
|
|
|
+ @change="change"
|
|
|
+ ></up-input>
|
|
|
+ </view>
|
|
|
+ <!-- 保持内容底部有足够的空白以避免按钮遮挡内容 -->
|
|
|
+ <view style="height: 120rpx;"></view>
|
|
|
+ </scroll-view>
|
|
|
+ <!-- 将按钮移到scroll-view外部,但保持在popup内 -->
|
|
|
+ <view class="popup-fixed-bottom">
|
|
|
<up-button
|
|
|
type="primary"
|
|
|
shape="circle"
|
|
@@ -182,7 +199,7 @@
|
|
|
</view>
|
|
|
|
|
|
<!-- 第二个弹框-->
|
|
|
- <up-popup v-model:show="showSecond">
|
|
|
+ <up-popup :show="showSecond">
|
|
|
<view>
|
|
|
<up-cell-group>
|
|
|
<view
|
|
@@ -289,7 +306,10 @@
|
|
|
<up-line></up-line>
|
|
|
|
|
|
<!-- 其他支付方式 -->
|
|
|
- <view class="other-payment"> 其他方式支付 > </view>
|
|
|
+ <view class="other-payment">
|
|
|
+ <text class="other-payment-text">其他方式支付</text>
|
|
|
+ <up-icon name="arrow-right" size="14" color="#1890ff"></up-icon>
|
|
|
+ </view>
|
|
|
|
|
|
<!-- 条款说明 -->
|
|
|
<view class="terms-of-service">
|
|
@@ -387,6 +407,13 @@ const radiolist2 = reactive([
|
|
|
},
|
|
|
])
|
|
|
|
|
|
+// 设置第一个弹框的样式
|
|
|
+const popupStyle = {
|
|
|
+ height: '80vh', // 设置为视窗高度的80%
|
|
|
+ overflow: 'hidden', // 防止内容溢出
|
|
|
+ position: 'relative', // 需要这个来支持内部的绝对定位元素
|
|
|
+}
|
|
|
+
|
|
|
// 详情底部立即购买弹框
|
|
|
const buttonClick = (e) => {
|
|
|
show.value = true // 打开弹框
|
|
@@ -514,7 +541,7 @@ const valChange = (obj) => {
|
|
|
? filteredSlots[filteredSlots.length - 1].timeStamp - a.timeStamp
|
|
|
: 0
|
|
|
|
|
|
- console.log(filteredSlots, '>>>>>filteredSlots')
|
|
|
+ // console.log(filteredSlots, '>>>>>filteredSlots')
|
|
|
|
|
|
if (timestampDifferenceValue < durationMs) {
|
|
|
minQuantityMax.value = obj.value - 1
|
|
@@ -641,12 +668,12 @@ const upPopupOpen = () => {
|
|
|
}
|
|
|
|
|
|
const computeMoney = computed(() => {
|
|
|
- console.log(
|
|
|
- totalTimes.value,
|
|
|
- businessPrice.value,
|
|
|
- singleQuantity.value,
|
|
|
- '>>>>>> console.log(totalTimes.value * businessPrice.value * minQuantity.value);'
|
|
|
- )
|
|
|
+ // console.log(
|
|
|
+ // totalTimes.value,
|
|
|
+ // businessPrice.value,
|
|
|
+ // singleQuantity.value,
|
|
|
+ // '>>>>>> console.log(totalTimes.value * businessPrice.value * minQuantity.value);'
|
|
|
+ // )
|
|
|
return totalTimes.value * businessPrice.value * singleQuantity.value
|
|
|
})
|
|
|
|
|
@@ -713,7 +740,7 @@ const proceedToPayment = async () => {
|
|
|
|
|
|
// 保存订单号
|
|
|
const mainOrderId = res.data.mainOrderId
|
|
|
- console.log('创建订单成功,订单号:', mainOrderId)
|
|
|
+ // console.log('创建订单成功,订单号:', mainOrderId)
|
|
|
|
|
|
// 如果是微信支付
|
|
|
if (paymentMethod.value === 2) {
|
|
@@ -722,7 +749,7 @@ const proceedToPayment = async () => {
|
|
|
...res.data,
|
|
|
package: res.data.packageValue,
|
|
|
success: (payRes) => {
|
|
|
- console.log('支付成功:', payRes)
|
|
|
+ // console.log('支付成功:', payRes)
|
|
|
if (payRes.errMsg === 'requestPayment:ok') {
|
|
|
uni.showToast({
|
|
|
title: '支付成功',
|
|
@@ -739,11 +766,11 @@ const proceedToPayment = async () => {
|
|
|
}
|
|
|
},
|
|
|
fail: async (payRes) => {
|
|
|
- console.log('支付失败或取消:', payRes)
|
|
|
+ // console.log('支付失败或取消:', payRes)
|
|
|
try {
|
|
|
// 调用取消支付接口
|
|
|
const cancelRes = await coreUsersOrdersPayCancel({ mainOrderId })
|
|
|
- console.log('取消支付接口调用成功:', cancelRes)
|
|
|
+ // console.log('取消支付接口调用成功:', cancelRes)
|
|
|
|
|
|
if (payRes.errMsg === 'requestPayment:fail cancel') {
|
|
|
uni.showToast({
|
|
@@ -989,24 +1016,27 @@ onMounted(async () => {
|
|
|
}
|
|
|
|
|
|
.Wrap-Payment {
|
|
|
- padding: 30rpx;
|
|
|
+ padding: 40rpx 30rpx;
|
|
|
background-color: #fff;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ margin-bottom: 20rpx;
|
|
|
}
|
|
|
|
|
|
.payment-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
- padding: 20rpx 0;
|
|
|
+ padding: 20rpx 0 30rpx;
|
|
|
}
|
|
|
|
|
|
.payment-title {
|
|
|
font-size: 32rpx;
|
|
|
font-weight: bold;
|
|
|
+ color: #333;
|
|
|
}
|
|
|
|
|
|
.payment-amount {
|
|
|
- font-size: 36rpx;
|
|
|
+ font-size: 40rpx;
|
|
|
color: #ff4d4f;
|
|
|
font-weight: bold;
|
|
|
}
|
|
@@ -1024,18 +1054,26 @@ onMounted(async () => {
|
|
|
}
|
|
|
|
|
|
.payment-icon {
|
|
|
- width: 80rpx;
|
|
|
- height: 80rpx;
|
|
|
- margin-right: 20rpx;
|
|
|
+ width: 64rpx;
|
|
|
+ height: 64rpx;
|
|
|
+ margin-right: 24rpx;
|
|
|
+ border-radius: 8rpx;
|
|
|
}
|
|
|
|
|
|
.option-text {
|
|
|
font-size: 30rpx;
|
|
|
- font-weight: bold;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #333;
|
|
|
}
|
|
|
|
|
|
.other-payment {
|
|
|
padding: 30rpx 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+
|
|
|
+.other-payment-text {
|
|
|
color: #1890ff;
|
|
|
font-size: 28rpx;
|
|
|
}
|
|
@@ -1044,11 +1082,19 @@ onMounted(async () => {
|
|
|
padding: 30rpx 0;
|
|
|
font-size: 24rpx;
|
|
|
color: #999;
|
|
|
- line-height: 1.5;
|
|
|
+ line-height: 1.6;
|
|
|
+ background-color: #f9f9f9;
|
|
|
+ padding: 20rpx;
|
|
|
+ border-radius: 8rpx;
|
|
|
}
|
|
|
|
|
|
-.confirm-button {
|
|
|
- margin-top: 40rpx;
|
|
|
+.Wrap-detils-btn {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ padding: 30rpx;
|
|
|
+ background-color: #fff;
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
}
|
|
|
|
|
|
.certificate {
|
|
@@ -1144,10 +1190,223 @@ onMounted(async () => {
|
|
|
margin-right: 20rpx;
|
|
|
}
|
|
|
|
|
|
-.service-price {
|
|
|
- font-size: 32rpx;
|
|
|
+.service-price-tag {
|
|
|
+ font-size: 36rpx;
|
|
|
font-weight: bold;
|
|
|
color: #ff4d4f;
|
|
|
white-space: nowrap;
|
|
|
+ padding: 8rpx 16rpx;
|
|
|
+ background-color: #fff2f0;
|
|
|
+ border-radius: 8rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* 弹框滚动内容样式 */
|
|
|
+.popup-scroll-content {
|
|
|
+ height: calc(80vh - 120rpx); /* 减去底部按钮区域的高度 */
|
|
|
+ padding: 24rpx;
|
|
|
+ padding-bottom: 30px; /* 增加底部内边距,避免内容被按钮遮挡 */
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+/* 固定底部按钮样式 */
|
|
|
+.popup-fixed-bottom {
|
|
|
+ position: absolute; /* 相对于popup容器定位 */
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ width: 100%;
|
|
|
+ background-color: white;
|
|
|
+ padding: 20rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end; /* 右对齐按钮 */
|
|
|
+ align-items: center;
|
|
|
+ box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1); /* 顶部阴影,创造分隔感 */
|
|
|
+ z-index: 1; /* 确保按钮在内容之上 */
|
|
|
+}
|
|
|
+
|
|
|
+/* 服务信息项样式 */
|
|
|
+.service-info-item {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ padding: 24rpx 0;
|
|
|
+ border-bottom: 1px solid #f5f5f5;
|
|
|
+}
|
|
|
+
|
|
|
+.service-label {
|
|
|
+ width: 200rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #666;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.service-value {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+.service-number-box {
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* 服务周期样式 */
|
|
|
+.service-period {
|
|
|
+ padding: 24rpx 0;
|
|
|
+ border-bottom: 1px solid #f5f5f5;
|
|
|
+}
|
|
|
+
|
|
|
+.date-picker-container {
|
|
|
+ margin: 20rpx 0;
|
|
|
+ padding: 12rpx;
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.calendar-component {
|
|
|
+ margin-top: 20rpx;
|
|
|
+ border: 1px solid #f0f0f0;
|
|
|
+ border-radius: 8rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* 备注容器样式 */
|
|
|
+.remark-container {
|
|
|
+ padding: 24rpx 0;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.remark-input {
|
|
|
+ margin-top: 16rpx;
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* 修改卡片基础样式 */
|
|
|
+.card-container {
|
|
|
+ display: flex;
|
|
|
+ padding: 24rpx;
|
|
|
+ margin: 16rpx 0;
|
|
|
+ background-color: #fff;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
|
|
|
+}
|
|
|
+
|
|
|
+/* 志愿者卡片样式 */
|
|
|
+.volunteer-card {
|
|
|
+ display: flex;
|
|
|
+ position: relative;
|
|
|
+ padding: 24rpx 0;
|
|
|
+ align-items: flex-start;
|
|
|
+}
|
|
|
+
|
|
|
+.volunteer-image {
|
|
|
+ width: 180rpx;
|
|
|
+ height: 180rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ margin-right: 24rpx;
|
|
|
+ flex-shrink: 0;
|
|
|
+ object-fit: cover;
|
|
|
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.volunteer-info {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 16rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.info-row {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.info-label {
|
|
|
+ color: #666;
|
|
|
+ font-size: 26rpx;
|
|
|
+ margin-right: 8rpx;
|
|
|
+ width: 140rpx;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.info-value {
|
|
|
+ color: #333;
|
|
|
+ font-size: 26rpx;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+.volunteer-rating {
|
|
|
+ position: absolute;
|
|
|
+ top: 24rpx;
|
|
|
+ right: 0;
|
|
|
+ background-color: #fff8e6;
|
|
|
+ padding: 8rpx 16rpx;
|
|
|
+ border-radius: 20rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ border: 1px solid #ffebb7;
|
|
|
+}
|
|
|
+
|
|
|
+.rating-text {
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #ff9900;
|
|
|
+ font-weight: bold;
|
|
|
+ margin-right: 6rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.rating-label {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #ff9900;
|
|
|
+}
|
|
|
+
|
|
|
+/* 技能描述样式 */
|
|
|
+.skill-description {
|
|
|
+ padding: 16rpx 0;
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 1.6;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+
|
|
|
+/* 证书样式 */
|
|
|
+.certificate {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.certificate-img {
|
|
|
+ border-radius: 8rpx;
|
|
|
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
|
|
|
+ margin-bottom: 16rpx;
|
|
|
+}
|
|
|
+
|
|
|
+/* Address selection styles */
|
|
|
+.address-display {
|
|
|
+ padding: 16rpx;
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ margin-bottom: 16rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.address-line {
|
|
|
+ font-size: 28rpx;
|
|
|
+ line-height: 40rpx;
|
|
|
+ color: #333;
|
|
|
+ display: block;
|
|
|
+ margin-bottom: 12rpx;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+.contact-info {
|
|
|
+ display: flex;
|
|
|
+ gap: 20rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.contact-name, .contact-phone {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #666;
|
|
|
+ line-height: 36rpx;
|
|
|
}
|
|
|
</style>
|