解决登录显示、首页显示bug
This commit is contained in:
@@ -4,36 +4,70 @@
|
||||
<text class="empty-text">未找到对应服务单</text>
|
||||
</view>
|
||||
<view v-else>
|
||||
<ServicePanel title="服务进度" subtitle="申请到执行的关键状态先以 mock 流程展示。">
|
||||
<ServiceInfoCard
|
||||
:title="detail.serviceName"
|
||||
:code="detail.caseNo"
|
||||
:status-text="detail.statusText"
|
||||
:status-tone="detail.statusTone"
|
||||
:items="[
|
||||
{ label: '上门时间', value: detail.serviceTime },
|
||||
{ label: '当前进度', value: '第 ' + detail.currentStep + ' / ' + detail.totalSteps + ' 步' },
|
||||
{ label: '执行人员', value: detail.staffName + ' ' + detail.staffPhone }
|
||||
]"
|
||||
></ServiceInfoCard>
|
||||
</ServicePanel>
|
||||
<view class="summary-card">
|
||||
<view class="summary-top-row">
|
||||
<view>
|
||||
<text class="summary-title">{{ detail.serviceName }}</text>
|
||||
<text class="summary-case-no">服务单号:{{ detail.caseNo }}</text>
|
||||
</view>
|
||||
<ServiceStatusTag :text="detail.statusText" :tone="detail.statusTone"></ServiceStatusTag>
|
||||
</view>
|
||||
<text class="summary-desc">{{ detail.summary }}</text>
|
||||
<view class="summary-price-row">
|
||||
<text class="summary-price-prefix">¥</text>
|
||||
<text class="summary-price">{{ detail.amount }}</text>
|
||||
<text class="summary-price-unit">服务金额</text>
|
||||
</view>
|
||||
<view class="summary-meta-grid">
|
||||
<view class="summary-meta-item">
|
||||
<text class="summary-meta-label">上门时间</text>
|
||||
<text class="summary-meta-value">{{ detail.serviceTime }}</text>
|
||||
</view>
|
||||
<view class="summary-meta-item">
|
||||
<text class="summary-meta-label">当前进度</text>
|
||||
<text class="summary-meta-value">第 {{ detail.currentStep }} / {{ detail.totalSteps }} 步</text>
|
||||
</view>
|
||||
<view class="summary-meta-item">
|
||||
<text class="summary-meta-label">服务机构 / 人员</text>
|
||||
<text class="summary-meta-value">{{ detail.staffName }}</text>
|
||||
</view>
|
||||
<view class="summary-meta-item">
|
||||
<text class="summary-meta-label">联系电话</text>
|
||||
<text class="summary-meta-value">{{ detail.staffPhone }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<ServicePanel title="服务对象信息">
|
||||
<ServicePanel title="预约信息" subtitle="围绕联系人、地址和服务对象展示当前预约信息。">
|
||||
<ServiceInfoList
|
||||
:items="[
|
||||
{ label: '申请人:', value: detail.applicantName },
|
||||
{ label: '联系人:', value: detail.applicantName },
|
||||
{ label: '服务对象:', value: detail.elderName + ',' + detail.age + ' 岁' },
|
||||
{ label: '联系电话:', value: detail.phone },
|
||||
{ label: '服务地址:', value: detail.address },
|
||||
{ label: '需求说明:', value: detail.summary }
|
||||
{ label: '预约备注:', value: detail.summary }
|
||||
]"
|
||||
></ServiceInfoList>
|
||||
<view v-if="detail.status == 'pending_acceptance'" class="feedback-btn" @click="goFeedback">去验收反馈</view>
|
||||
</ServicePanel>
|
||||
|
||||
<ServicePanel title="过程留痕" subtitle="后续可替换为真实时间线与上传凭证。">
|
||||
<ServicePanel title="服务保障" subtitle="用户在预约后仍可看到平台保障与追溯承诺。">
|
||||
<view class="guarantee-row">
|
||||
<text class="guarantee-chip">平台认证</text>
|
||||
<text class="guarantee-chip">明码标价</text>
|
||||
<text class="guarantee-chip">服务可追溯</text>
|
||||
<text class="guarantee-chip">异常可申诉</text>
|
||||
</view>
|
||||
</ServicePanel>
|
||||
|
||||
<ServicePanel title="服务过程" subtitle="当前以 mock 时间线展示预约受理、派单和上门过程。">
|
||||
<ServiceTimeline :items="detail.timeline"></ServiceTimeline>
|
||||
</ServicePanel>
|
||||
|
||||
<view class="action-row">
|
||||
<view class="secondary-btn" @click="bookAgain">再次预约</view>
|
||||
<view v-if="detail.status == 'pending_acceptance'" class="primary-btn" @click="goFeedback">去验收反馈</view>
|
||||
<view v-else class="primary-btn" @click="contactService">联系客服</view>
|
||||
</view>
|
||||
</view>
|
||||
</ServicePageScaffold>
|
||||
</template>
|
||||
@@ -42,9 +76,9 @@
|
||||
import { ref } from 'vue'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
import ServicePageScaffold from '@/components/homeService/ServicePageScaffold.uvue'
|
||||
import ServiceInfoCard from '@/components/homeService/ServiceInfoCard.uvue'
|
||||
import ServiceInfoList from '@/components/homeService/ServiceInfoList.uvue'
|
||||
import ServicePanel from '@/components/homeService/ServicePanel.uvue'
|
||||
import ServiceStatusTag from '@/components/homeService/ServiceStatusTag.uvue'
|
||||
import ServiceTimeline from '@/components/homeService/ServiceTimeline.uvue'
|
||||
import { fetchConsumerHomeServiceCaseDetail } from '@/services/homeServiceService.uts'
|
||||
import { HomeServiceCaseType } from '@/types/home-service.uts'
|
||||
@@ -66,6 +100,24 @@ function goFeedback() {
|
||||
uni.navigateTo({ url: '/pages/mall/consumer/home-service/feedback?id=' + caseId.value })
|
||||
}
|
||||
|
||||
function bookAgain() {
|
||||
if (detail.value == null) {
|
||||
return
|
||||
}
|
||||
let serviceTargetId = 'svc-001'
|
||||
if (detail.value.serviceName == '康复训练指导') {
|
||||
serviceTargetId = 'svc-002'
|
||||
}
|
||||
if (detail.value.serviceName == '慢病健康随访') {
|
||||
serviceTargetId = 'svc-003'
|
||||
}
|
||||
uni.navigateTo({ url: '/pages/mall/consumer/home-service/service-detail?id=' + serviceTargetId + '&mode=booking' })
|
||||
}
|
||||
|
||||
function contactService() {
|
||||
uni.showToast({ title: '即将接入专属客服入口', icon: 'none' })
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
const id = options['id']
|
||||
if (id != null) {
|
||||
@@ -80,29 +132,129 @@ onShow(() => {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.page {
|
||||
min-height: 100vh;
|
||||
background: #f3f7f9;
|
||||
padding: 24rpx;
|
||||
|
||||
.summary-card {
|
||||
background: #ffffff;
|
||||
border-radius: 32rpx;
|
||||
padding: 28rpx;
|
||||
box-shadow: 0 12rpx 24rpx rgba(15, 23, 42, 0.06);
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.summary-top-row,
|
||||
.summary-price-row,
|
||||
.action-row,
|
||||
.guarantee-row {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.summary-top-row,
|
||||
.action-row {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.summary-title {
|
||||
font-size: 34rpx;
|
||||
font-weight: 700;
|
||||
color: #16324f;
|
||||
}
|
||||
|
||||
.summary-case-no,
|
||||
.summary-desc,
|
||||
.summary-meta-label,
|
||||
.summary-meta-value,
|
||||
.empty-text {
|
||||
margin-top: 10rpx;
|
||||
font-size: 24rpx;
|
||||
line-height: 34rpx;
|
||||
color: #66788a;
|
||||
}
|
||||
|
||||
.summary-desc {
|
||||
margin-top: 18rpx;
|
||||
}
|
||||
|
||||
.summary-price-row {
|
||||
margin-top: 18rpx;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.summary-price-prefix,
|
||||
.summary-price {
|
||||
font-size: 40rpx;
|
||||
font-weight: 700;
|
||||
color: #0f766e;
|
||||
}
|
||||
|
||||
.summary-price-unit {
|
||||
font-size: 22rpx;
|
||||
color: #64748b;
|
||||
margin-left: 10rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.summary-meta-grid {
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
margin-top: 22rpx;
|
||||
}
|
||||
|
||||
.summary-meta-item {
|
||||
width: 48%;
|
||||
padding: 22rpx;
|
||||
border-radius: 24rpx;
|
||||
background: #f8fbfd;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.guarantee-row {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.guarantee-chip {
|
||||
padding: 12rpx 18rpx;
|
||||
border-radius: 999rpx;
|
||||
background: #eef6ff;
|
||||
font-size: 22rpx;
|
||||
color: #476072;
|
||||
margin-right: 12rpx;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.action-row {
|
||||
margin-top: 10rpx;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.secondary-btn,
|
||||
.primary-btn {
|
||||
width: 48%;
|
||||
height: 78rpx;
|
||||
border-radius: 999rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 700;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.secondary-btn {
|
||||
background: #ffffff;
|
||||
border-width: 2rpx;
|
||||
border-style: solid;
|
||||
border-color: #cbd5e1;
|
||||
color: #476072;
|
||||
}
|
||||
|
||||
.primary-btn {
|
||||
background: #16a085;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.empty-text {
|
||||
margin-top: 10rpx;
|
||||
font-size: 26rpx;
|
||||
line-height: 38rpx;
|
||||
color: #66788a;
|
||||
}
|
||||
|
||||
.feedback-btn {
|
||||
margin-top: 24rpx;
|
||||
padding: 24rpx 0;
|
||||
text-align: center;
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
background: #1d4ed8;
|
||||
border-radius: 18rpx;
|
||||
}
|
||||
|
||||
.empty-box {
|
||||
|
||||
Reference in New Issue
Block a user