|
|
|
@ -13,28 +13,48 @@ |
|
|
|
<van-list v-model:loading="loading" :finished="finished" finished-text="" |
|
|
|
@load="onLoad" :offset="50"> |
|
|
|
<van-empty v-if="finished && reserveList.length === 0" description="暂无预约" /> |
|
|
|
<div v-for="(item, index) in reserveList" :key="index" class="reserve-item"> |
|
|
|
<div class="reserve-time">{{ item.time }}</div> |
|
|
|
<div class="reserve-card"> |
|
|
|
<!-- <div class="card-header"> |
|
|
|
<span class="reserve-type">待确认预约:</span> |
|
|
|
</div> --> |
|
|
|
<div class="reserve-type">待确认预约:</div> |
|
|
|
<div class="card-body"> |
|
|
|
<div class="reserve-row"> |
|
|
|
<span class="reserve-label">{{ item.reserveUnit ? '预约单位' : '执法单位' }}</span> |
|
|
|
<span class="reserve-value">{{ item.reserveUnit || item.bureauDeptName || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="reserve-row"> |
|
|
|
<span class="reserve-label">企业名称</span> |
|
|
|
<span class="reserve-value">{{ item.enterpriseName || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="reserve-row"> |
|
|
|
<span class="reserve-label">检查时间</span> |
|
|
|
<span class="reserve-value">{{ formatDate(item.planDate) }}</span> |
|
|
|
</div> |
|
|
|
<div v-for="(item, index) in reserveList" :key="index" class="reserve-item" @click="toDetail(item)"> |
|
|
|
<!-- 标题行 --> |
|
|
|
<div class="item-title-row"> |
|
|
|
<div class="item-icon"> |
|
|
|
<svg viewBox="0 0 24 24" fill="currentColor"> |
|
|
|
<path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/> |
|
|
|
</svg> |
|
|
|
<span v-if="item.isRead === 0" class="unread-dot"></span> |
|
|
|
</div> |
|
|
|
<div class="item-content"> |
|
|
|
<div class="item-title">待确认预约</div> |
|
|
|
<div class="info-row"> |
|
|
|
<!-- <div class="info-label">检查时间: </div> --> |
|
|
|
<div class="info-value">{{ formatTime(item.planDate) }}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="item-footer"> |
|
|
|
<!-- <span class="item-time">{{ formatTime(item.planDate) }}</span> --> |
|
|
|
<span class="item-action"> |
|
|
|
查看详情 |
|
|
|
<van-icon name="arrow" /> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 内容 --> |
|
|
|
<!-- <div class="item-summary"> |
|
|
|
<div class="info-row"> |
|
|
|
<span class="info-label">{{ item.reserveUnit ? '预约单位' : '执法单位' }}</span> |
|
|
|
<span class="info-value">{{ item.reserveUnit || item.bureauDeptName || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="info-row"> |
|
|
|
<span class="info-label">企业名称</span> |
|
|
|
<span class="info-value">{{ item.enterpriseName || '-' }}</span> |
|
|
|
</div> |
|
|
|
<div class="info-row"> |
|
|
|
<span class="info-label">检查时间</span> |
|
|
|
<span class="info-value">{{ formatDate(item.planDate) }}</span> |
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
|
|
|
|
<!-- 底部信息 --> |
|
|
|
</div> |
|
|
|
</van-list> |
|
|
|
</van-pull-refresh> |
|
|
|
@ -113,6 +133,24 @@ const formatDate = (dateStr) => { |
|
|
|
return dateStr.substring(0, 10); |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 格式化时间 ========== |
|
|
|
const formatTime = (val) => { |
|
|
|
if (!val) return ''; |
|
|
|
const d = new Date(typeof val === 'string' ? val.replace(/-/g, '/') : val); |
|
|
|
if (isNaN(d.getTime())) return val; |
|
|
|
const y = d.getFullYear(); |
|
|
|
const m = String(d.getMonth() + 1).padStart(2, '0'); |
|
|
|
const day = String(d.getDate()).padStart(2, '0'); |
|
|
|
const h = String(d.getHours()).padStart(2, '0'); |
|
|
|
const mi = String(d.getMinutes()).padStart(2, '0'); |
|
|
|
return `${y}-${m}-${day} ${h}:${mi}`; |
|
|
|
}; |
|
|
|
|
|
|
|
// ========== 跳转详情 ========== |
|
|
|
const toDetail = (item) => { |
|
|
|
showToast('查看详情'); |
|
|
|
}; |
|
|
|
|
|
|
|
const onLoad = () => { |
|
|
|
if (loading.value || finished.value) return; |
|
|
|
fetchReserveList(); |
|
|
|
@ -153,69 +191,125 @@ onMounted(() => { |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
height: 100%; |
|
|
|
background: #fbfdff; |
|
|
|
} |
|
|
|
background-color: #fbfdff; |
|
|
|
|
|
|
|
.content-area { |
|
|
|
flex: 1; |
|
|
|
overflow-y: auto; |
|
|
|
padding: 12px; |
|
|
|
padding-top: 0px; |
|
|
|
.content-area { |
|
|
|
flex: 1; |
|
|
|
overflow-y: auto; |
|
|
|
padding: 0.27rem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* ===== 列表项样式 ===== */ |
|
|
|
.reserve-item { |
|
|
|
margin-bottom: 16px; |
|
|
|
background: #fff; |
|
|
|
border-radius: 0.2rem; |
|
|
|
padding:6px 10px; |
|
|
|
margin-bottom: 0.27rem; |
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-time { |
|
|
|
font-size: 12px; |
|
|
|
color: #999; |
|
|
|
margin-bottom: 8px; |
|
|
|
padding-left: 8px; |
|
|
|
.item-title-row { |
|
|
|
display: flex; |
|
|
|
// align-items: center; |
|
|
|
margin-bottom: 0.2rem; |
|
|
|
.item-content{ |
|
|
|
width: 240px; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-card { |
|
|
|
background: #fff; |
|
|
|
border-radius: 12px; |
|
|
|
padding: 12px 16px; |
|
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); |
|
|
|
} |
|
|
|
.item-icon { |
|
|
|
width: 0.5rem; |
|
|
|
height: 0.5rem; |
|
|
|
min-width: 0.5rem; |
|
|
|
margin-right: 0.15rem; |
|
|
|
color: #2d94fa; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
position: relative; |
|
|
|
|
|
|
|
svg { |
|
|
|
width: 100%; |
|
|
|
height: 100%; |
|
|
|
} |
|
|
|
|
|
|
|
.card-header { |
|
|
|
margin-bottom: 8px; |
|
|
|
.unread-dot { |
|
|
|
position: absolute; |
|
|
|
top: -0.05rem; |
|
|
|
right: -0.05rem; |
|
|
|
width: 0.12rem; |
|
|
|
height: 0.12rem; |
|
|
|
min-width: 0.12rem; |
|
|
|
background-color: #ee0a24; |
|
|
|
border-radius: 50%; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-type { |
|
|
|
font-size: 14px; |
|
|
|
font-weight: 600; |
|
|
|
color: #333; |
|
|
|
padding: 8px 0; |
|
|
|
.item-title { |
|
|
|
flex: 1; |
|
|
|
font-size: 0.4rem; |
|
|
|
font-weight: bold; |
|
|
|
color: #1a1a1a; |
|
|
|
overflow: hidden; |
|
|
|
text-overflow: ellipsis; |
|
|
|
white-space: nowrap; |
|
|
|
} |
|
|
|
|
|
|
|
.card-body { |
|
|
|
padding-left: 4px; |
|
|
|
.item-summary { |
|
|
|
font-size: 0.32rem; |
|
|
|
color: #666; |
|
|
|
line-height: 1.6; |
|
|
|
margin-bottom: 0.2rem; |
|
|
|
|
|
|
|
// .info-row { |
|
|
|
// display: flex; |
|
|
|
// margin-bottom: 0.1rem; |
|
|
|
|
|
|
|
// &:last-child { |
|
|
|
// margin-bottom: 0; |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
.info-label { |
|
|
|
color: #999; |
|
|
|
min-width: 1.4rem; |
|
|
|
flex-shrink: 0; |
|
|
|
} |
|
|
|
|
|
|
|
.info-value { |
|
|
|
color: #666; |
|
|
|
flex: 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-row { |
|
|
|
.item-footer { |
|
|
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
align-items: center; |
|
|
|
margin-bottom: 10px; |
|
|
|
|
|
|
|
&:last-child { |
|
|
|
margin-bottom: 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-label { |
|
|
|
font-size: 13px; |
|
|
|
color: #666; |
|
|
|
min-width: 60px; |
|
|
|
flex-shrink: 0; |
|
|
|
.item-time { |
|
|
|
font-size: 0.3rem; |
|
|
|
color: #999; |
|
|
|
} |
|
|
|
|
|
|
|
.reserve-value { |
|
|
|
font-size: 13px; |
|
|
|
color: #333; |
|
|
|
flex: 1; |
|
|
|
.item-action { |
|
|
|
font-size: 0.3rem; |
|
|
|
color: #999; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
|
|
|
|
:deep(.van-icon) { |
|
|
|
font-size: 0.28rem; |
|
|
|
margin-left: 0.05rem; |
|
|
|
} |
|
|
|
} |
|
|
|
.info-row{ |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
font-size: 14px; |
|
|
|
color: #999; |
|
|
|
height: 24px; |
|
|
|
} |
|
|
|
</style> |
|
|
|
|