ai-c/pages/service-provider-detail/service-provider-detail.wxml
2026-02-02 18:21:32 +08:00

309 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

<!-- 服务人员详情页 -->
<view class="page-container">
<!-- 固定导航栏 -->
<view class="nav-container">
<view class="status-bar" style="height: {{statusBarHeight}}px;"></view>
<view class="nav-bar" style="height: {{navBarHeight}}px;">
<view class="nav-back" bindtap="onBack">
<image src="/images/icon-back.png" class="back-icon" mode="aspectFit"></image>
</view>
<view class="nav-title">服务详情</view>
<view class="nav-share" bindtap="onShare">
<image src="/images/icon-share.png" class="share-icon" mode="aspectFit"></image>
</view>
</view>
</view>
<!-- 内容滚动区域 -->
<scroll-view scroll-y class="content-scroll" style="padding-top: {{totalNavHeight}}px;" enhanced show-scrollbar="{{false}}">
<!-- 服务人员信息卡片 -->
<view class="provider-card">
<!-- 头部背景渐变 -->
<view class="card-header-bg"></view>
<!-- 人员信息 -->
<view class="provider-info">
<view class="avatar-section">
<view class="avatar-wrap">
<image src="{{provider.avatar}}" class="avatar-img" mode="aspectFill"></image>
<view class="verified-badge">
<image src="/images/icon-verified.png" class="verified-icon" mode="aspectFit"></image>
<text class="verified-text">实名认证</text>
</view>
</view>
</view>
<view class="info-section">
<view class="name-row">
<text class="provider-name">{{provider.name}}</text>
<view class="provider-tag">{{provider.tag}}</view>
</view>
<view class="experience-row">
<view class="experience-item">
<image src="/images/icon-experience.png" class="exp-icon" mode="aspectFit"></image>
<text class="exp-text">{{provider.experience}}</text>
</view>
<view class="rating-item">
<image src="/images/service-star.png" class="star-icon" mode="aspectFit"></image>
<text class="rating-text">{{provider.rating}}</text>
</view>
</view>
<text class="provider-desc">{{provider.desc}}</text>
</view>
</view>
<!-- 统计数据 -->
<view class="stats-section">
<view class="stat-item">
<text class="stat-value">{{provider.hours}}</text>
<text class="stat-label">服务时长</text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-value">{{provider.serviceCount}}</text>
<text class="stat-label">服务人次</text>
</view>
<view class="stat-divider"></view>
<view class="stat-item">
<text class="stat-value">{{provider.repeatRate}}%</text>
<text class="stat-label">回头率</text>
</view>
</view>
</view>
<!-- 服务技能标签 -->
<view class="skills-card">
<view class="card-title">
<view class="title-dot"></view>
<text class="title-text">服务技能</text>
</view>
<view class="skills-list">
<view class="skill-tag" wx:for="{{provider.skills}}" wx:key="*this">
<image src="/images/icon-check-circle.png" class="check-icon" mode="aspectFit"></image>
<text class="skill-text">{{item}}</text>
</view>
</view>
</view>
<!-- 服务介绍 -->
<view class="intro-card">
<view class="card-title">
<view class="title-dot"></view>
<text class="title-text">服务介绍</text>
</view>
<text class="intro-content">{{provider.introduction}}</text>
</view>
<!-- 服务案例(如果有) -->
<view class="cases-card" wx:if="{{provider.cases && provider.cases.length > 0}}">
<view class="card-title">
<view class="title-dot"></view>
<text class="title-text">服务案例</text>
</view>
<view class="cases-list">
<view class="case-item" wx:for="{{provider.cases}}" wx:key="id">
<image src="{{item.image}}" class="case-image" mode="aspectFill"></image>
<text class="case-title">{{item.title}}</text>
</view>
</view>
</view>
<!-- 用户评价 -->
<view class="reviews-card">
<view class="card-title-row">
<view class="card-title">
<view class="title-dot"></view>
<text class="title-text">用户评价</text>
<text class="review-count">({{reviews.length}})</text>
</view>
<view class="view-all" bindtap="onViewAllReviews">
<text class="view-all-text">查看全部</text>
<image src="/images/service-arrow-right.png" class="arrow-icon" mode="aspectFit"></image>
</view>
</view>
<!-- 评价列表 -->
<view class="review-list">
<view class="review-item" wx:for="{{reviews}}" wx:key="id" wx:if="{{index < 3}}">
<view class="review-header">
<view class="user-info">
<image src="{{item.userAvatar || '/images/default-avatar.png'}}" class="user-avatar" mode="aspectFill"></image>
<view class="user-detail">
<text class="user-name">{{item.userName}}</text>
<view class="review-stars">
<image src="/images/service-star.png" class="star-small" wx:for="{{item.rating}}" wx:for-item="star" wx:key="*this" mode="aspectFit"></image>
</view>
</view>
</view>
<text class="review-date">{{item.date}}</text>
</view>
<text class="review-content">{{item.content}}</text>
<view class="review-tags" wx:if="{{item.tags && item.tags.length > 0}}">
<view class="review-tag" wx:for="{{item.tags}}" wx:for-item="tag" wx:key="*this">
<text class="tag-text">{{tag}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 底部占位 -->
<view class="bottom-placeholder"></view>
</scroll-view>
<!-- 底部操作栏 -->
<view class="bottom-bar">
<view class="price-section">
<view class="price-row">
<text class="price-symbol">¥</text>
<text class="price-value">{{provider.price}}</text>
<text class="price-unit">{{provider.unit}}</text>
</view>
<text class="price-tip">起步价</text>
</view>
<view class="action-buttons">
<view class="consult-btn" bindtap="onConsult">
<image src="/images/icon-chat.png" class="btn-icon" mode="aspectFit"></image>
<text class="btn-text">咨询</text>
</view>
<view class="book-btn" bindtap="onBook">
<text class="btn-text">立即预约</text>
</view>
</view>
</view>
</view>
<!-- 预约弹窗 -->
<view class="booking-modal-mask" wx:if="{{showBookingModal}}" bindtap="closeBookingModal"></view>
<view class="booking-modal {{showBookingModal ? 'show' : ''}}" wx:if="{{showBookingModal}}">
<view class="modal-header">
<text class="modal-title">预约服务</text>
<view class="modal-close" bindtap="closeBookingModal">
<text class="close-icon">×</text>
</view>
</view>
<scroll-view scroll-y class="modal-content">
<!-- 服务人员信息 -->
<view class="booking-provider">
<image src="{{provider.avatar}}" class="provider-avatar-small" mode="aspectFill"></image>
<view class="provider-info-small">
<text class="provider-name-small">{{provider.name}}</text>
<text class="provider-tag-small">{{provider.tag}}</text>
</view>
</view>
<!-- 服务类型选择 -->
<view class="form-section">
<text class="form-label">服务类型</text>
<view class="service-type-list">
<view class="type-item {{selectedType === item.id ? 'active' : ''}}"
wx:for="{{serviceTypes}}" wx:key="id"
bindtap="selectServiceType" data-id="{{item.id}}">
<text class="type-name">{{item.name}}</text>
<text class="type-price">¥{{item.price}}/{{item.unit}}</text>
</view>
</view>
</view>
<!-- 预约时间 -->
<view class="form-section">
<text class="form-label">预约时间</text>
<view class="time-picker" bindtap="onPickTime">
<text class="time-text">{{bookingTime || '请选择时间'}}</text>
<image src="/images/icon-calendar.png" class="calendar-icon" mode="aspectFit"></image>
</view>
</view>
<!-- 服务地址 -->
<view class="form-section">
<text class="form-label">服务地址</text>
<view class="address-picker" bindtap="onPickAddress">
<text class="address-text">{{bookingAddress || '请选择地址'}}</text>
<image src="/images/icon-location.png" class="location-icon" mode="aspectFit"></image>
</view>
</view>
<!-- 备注 -->
<view class="form-section">
<text class="form-label">备注说明</text>
<textarea class="remark-input" placeholder="请输入您的需求或特殊说明" value="{{remark}}" bindinput="onRemarkInput" maxlength="200"></textarea>
<text class="char-count">{{remark.length}}/200</text>
</view>
<!-- 价格汇总 -->
<view class="price-summary">
<view class="summary-row">
<text class="summary-label">服务费用</text>
<text class="summary-value">¥{{calculatePrice()}}</text>
</view>
<view class="summary-row">
<text class="summary-label">平台服务费</text>
<text class="summary-value">¥0</text>
</view>
<view class="summary-divider"></view>
<view class="summary-row total">
<text class="summary-label">合计</text>
<text class="summary-value total">¥{{calculatePrice()}}</text>
</view>
</view>
</scroll-view>
<view class="modal-footer">
<button class="confirm-btn" bindtap="confirmBooking">确认预约</button>
</view>
</view>
<!-- 全部评价弹窗 -->
<view class="all-reviews-modal-mask" wx:if="{{showAllReviewsModal}}" bindtap="closeAllReviewsModal"></view>
<view class="all-reviews-modal {{showAllReviewsModal ? 'show' : ''}}" wx:if="{{showAllReviewsModal}}">
<view class="modal-header">
<text class="modal-title">全部评价</text>
<view class="modal-close" bindtap="closeAllReviewsModal">
<text class="close-icon">×</text>
</view>
</view>
<!-- 评分汇总 -->
<view class="review-summary">
<view class="summary-left">
<text class="summary-score">{{provider.rating}}</text>
<view class="summary-stars">
<image src="/images/service-star.png" class="star-icon" wx:for="{{5}}" wx:key="*this" mode="aspectFit"></image>
</view>
<text class="summary-count">{{reviews.length}}条评价</text>
</view>
<view class="summary-right">
<text class="good-rate">{{provider.goodRate}}%</text>
<text class="good-rate-label">好评率</text>
</view>
</view>
<!-- 评价列表 -->
<scroll-view scroll-y class="all-reviews-list">
<view class="review-item" wx:for="{{reviews}}" wx:key="id">
<view class="review-header">
<view class="user-info">
<image src="{{item.userAvatar || '/images/default-avatar.png'}}" class="user-avatar" mode="aspectFill"></image>
<view class="user-detail">
<text class="user-name">{{item.userName}}</text>
<view class="review-stars">
<image src="/images/service-star.png" class="star-small" wx:for="{{item.rating}}" wx:for-item="star" wx:key="*this" mode="aspectFit"></image>
</view>
</view>
</view>
<text class="review-date">{{item.date}}</text>
</view>
<text class="review-content">{{item.content}}</text>
<view class="review-tags" wx:if="{{item.tags && item.tags.length > 0}}">
<view class="review-tag" wx:for="{{item.tags}}" wx:for-item="tag" wx:key="*this">
<text class="tag-text">{{tag}}</text>
</view>
</view>
</view>
</scroll-view>
</view>