246 lines
4.0 KiB
Vue
246 lines
4.0 KiB
Vue
<template>
|
|
<div id="app" :class="{ 'has-bottom-nav': showBottomNav }">
|
|
<router-view />
|
|
<BottomNav v-if="showBottomNav" />
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { onMounted, computed } from 'vue'
|
|
import { useRoute } from 'vue-router'
|
|
import { useUserStore } from '@/stores/user'
|
|
import BottomNav from '@/components/BottomNav.vue'
|
|
|
|
const route = useRoute()
|
|
const userStore = useUserStore()
|
|
|
|
// 定义需要显示底部导航的路由
|
|
const routesWithBottomNav = [
|
|
'/',
|
|
'/transfers',
|
|
'/matching',
|
|
'/mypoints-history',
|
|
'/shop',
|
|
'/orders',
|
|
'/mainpage',
|
|
'/myprofile',
|
|
'/myshop',
|
|
'/customerservice'
|
|
]
|
|
|
|
// 计算是否显示底部导航
|
|
const showBottomNav = computed(() => {
|
|
return routesWithBottomNav.includes(route.path)
|
|
})
|
|
|
|
onMounted(() => {
|
|
// 应用启动时检查登录状态
|
|
userStore.checkAuth()
|
|
})
|
|
</script>
|
|
|
|
<style>
|
|
#app {
|
|
min-height: 100vh;
|
|
background-color: #f5f5f5;
|
|
}
|
|
|
|
/* 全局样式 */
|
|
.page-container {
|
|
min-height: 100vh;
|
|
padding: 20px;
|
|
padding-bottom: 100px; /* 为底部导航栏留出空间 */
|
|
}
|
|
|
|
/* 为有底部导航的页面添加底部间距 */
|
|
.has-bottom-nav {
|
|
padding-bottom: 100px !important;
|
|
}
|
|
|
|
.card-container {
|
|
background: white;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.text-center {
|
|
text-align: center;
|
|
}
|
|
|
|
.mb-20 {
|
|
margin-bottom: 20px;
|
|
}
|
|
|
|
.mt-20 {
|
|
margin-top: 20px;
|
|
}
|
|
|
|
.full-width {
|
|
width: 100%;
|
|
}
|
|
|
|
/* 响应式设计 */
|
|
@media (max-width: 768px) {
|
|
.page-container {
|
|
padding: 10px;
|
|
padding-bottom: 120px; /* 增加底部导航空间 */
|
|
}
|
|
|
|
.card-container {
|
|
padding: 15px;
|
|
margin-bottom: 15px;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
/* Element Plus 组件移动端优化 */
|
|
.el-dialog {
|
|
width: 95% !important;
|
|
margin: 0 auto !important;
|
|
}
|
|
|
|
.el-form-item__label {
|
|
font-size: 14px !important;
|
|
}
|
|
|
|
.el-input__inner,
|
|
.el-textarea__inner {
|
|
font-size: 16px !important; /* 防止iOS缩放 */
|
|
}
|
|
|
|
.el-button {
|
|
min-height: 44px !important; /* 触摸友好 */
|
|
}
|
|
|
|
.el-table {
|
|
font-size: 14px !important;
|
|
}
|
|
|
|
.el-table th,
|
|
.el-table td {
|
|
padding: 8px 4px !important;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 480px) {
|
|
.page-container {
|
|
padding: 8px;
|
|
padding-bottom: 120px;
|
|
}
|
|
|
|
.card-container {
|
|
padding: 12px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.el-form-item__label {
|
|
font-size: 13px !important;
|
|
}
|
|
|
|
.el-button {
|
|
font-size: 14px !important;
|
|
padding: 8px 15px !important;
|
|
}
|
|
|
|
.el-table {
|
|
font-size: 12px !important;
|
|
}
|
|
}
|
|
|
|
/* Element Plus 样式覆盖 */
|
|
.el-header {
|
|
background-color: #409eff;
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 20px;
|
|
}
|
|
|
|
.el-main {
|
|
padding: 0;
|
|
}
|
|
|
|
.el-footer {
|
|
background-color: #f8f9fa;
|
|
color: #6c757d;
|
|
text-align: center;
|
|
line-height: 60px;
|
|
}
|
|
|
|
/* 自定义按钮样式 */
|
|
.btn-primary {
|
|
background-color: #409eff;
|
|
border-color: #409eff;
|
|
}
|
|
|
|
.btn-success {
|
|
background-color: #67c23a;
|
|
border-color: #67c23a;
|
|
}
|
|
|
|
.btn-warning {
|
|
background-color: #e6a23c;
|
|
border-color: #e6a23c;
|
|
}
|
|
|
|
.btn-danger {
|
|
background-color: #f56c6c;
|
|
border-color: #f56c6c;
|
|
}
|
|
|
|
/* 加载动画 */
|
|
.loading-container {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
height: 200px;
|
|
}
|
|
|
|
/* 空状态样式 */
|
|
.empty-state {
|
|
text-align: center;
|
|
padding: 40px 20px;
|
|
color: #909399;
|
|
}
|
|
|
|
.empty-state .el-icon {
|
|
font-size: 64px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
|
|
|
|
/* 用户头像样式 */
|
|
.user-avatar {
|
|
width: 40px;
|
|
height: 40px;
|
|
border-radius: 50%;
|
|
background-color: #409eff;
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* 状态标签样式 */
|
|
.status-tag {
|
|
font-size: 12px;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.status-published {
|
|
background-color: #f0f9ff;
|
|
color: #1890ff;
|
|
border: 1px solid #d1ecf1;
|
|
}
|
|
|
|
.status-draft {
|
|
background-color: #fff7e6;
|
|
color: #fa8c16;
|
|
border: 1px solid #ffd591;
|
|
}
|
|
</style> |