2025-07-31 15:29:40 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="status-display">
|
|
|
|
|
|
<!-- 加载状态 -->
|
|
|
|
|
|
<view v-if="type === 'loading'" class="loading">
|
|
|
|
|
|
<text>{{ loadingText }}</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<!-- 空数据提示 -->
|
|
|
|
|
|
<view v-else-if="type === 'empty'" class="empty">
|
|
|
|
|
|
<text>{{ emptyText }}</text>
|
|
|
|
|
|
</view>
|
2025-07-31 16:36:14 +08:00
|
|
|
|
<!-- 错误状态 -->
|
|
|
|
|
|
<view v-else-if="type === 'error'" class="error">
|
|
|
|
|
|
<text>{{ errorText }}</text>
|
|
|
|
|
|
</view>
|
2025-07-31 15:29:40 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
name: 'StatusDisplay',
|
|
|
|
|
|
props: {
|
2025-07-31 16:36:14 +08:00
|
|
|
|
// 状态类型:loading, empty, error
|
2025-07-31 15:29:40 +08:00
|
|
|
|
type: {
|
|
|
|
|
|
type: String,
|
|
|
|
|
|
required: true,
|
2025-07-31 16:36:14 +08:00
|
|
|
|
validator: value => ['loading', 'empty', 'error'].includes(value),
|
|
|
|
|
|
default: 'loading'
|
2025-07-31 15:29:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 加载文本
|
|
|
|
|
|
loadingText: {
|
|
|
|
|
|
type: String,
|
|
|
|
|
|
default: '加载中...'
|
|
|
|
|
|
},
|
|
|
|
|
|
// 空数据文本
|
|
|
|
|
|
emptyText: {
|
|
|
|
|
|
type: String,
|
|
|
|
|
|
default: '暂无数据'
|
2025-07-31 16:36:14 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 错误文本
|
|
|
|
|
|
errorText: {
|
|
|
|
|
|
type: String,
|
|
|
|
|
|
default: '加载失败'
|
2025-07-31 15:29:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.status-display {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
2025-07-31 16:36:14 +08:00
|
|
|
|
min-height: 200rpx;
|
2025-07-31 15:29:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-31 16:36:14 +08:00
|
|
|
|
.loading, .empty, .error {
|
2025-07-31 15:29:40 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
color: #999;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
background-color: #FFFBF5;
|
|
|
|
|
|
padding: 40rpx 0;
|
2025-07-31 16:36:14 +08:00
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.error {
|
|
|
|
|
|
color: #ff6b6b;
|
2025-07-31 15:29:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
</style>
|