Files
webs/power_leasing/src/views/account/index.vue

221 lines
4.9 KiB
Vue
Raw Normal View History

2025-09-26 16:40:38 +08:00
<template>
<div class="account-page">
<!-- <div class="account-header">
<h1 class="title">个人中心</h1>
</div> -->
<div class="account-layout">
<!-- 左侧导航 -->
<aside class="sidebar">
<nav class="side-nav">
<div class="user-info-card" role="region" v-show="userEmail" aria-label="用户信息" tabindex="0">
<div class="user-meta">
<div class="user-email" :title="userEmail || '未登录'">{{ userEmail || '未登录' }}</div>
</div>
</div>
<div class="user-role">
<button>买家相关</button>
<button>卖家相关</button>
</div>
<router-link
to="/account/wallet"
class="side-link"
active-class="active"
>我的钱包</router-link
>
<!-- <router-link
to="/account/shop-new"
class="side-link"
active-class="active"
>新增店铺</router-link
> -->
<router-link
to="/account/shop-config"
class="side-link"
active-class="active"
>钱包绑定</router-link
>
<router-link
to="/account/shops"
class="side-link"
active-class="active"
>我的店铺</router-link
>
<router-link
to="/account/products"
class="side-link"
active-class="active"
>商品列表</router-link
>
<router-link
to="/account/purchased"
class="side-link"
active-class="active"
>已购商品</router-link
>
<router-link
to="/account/seller-orders"
class="side-link"
active-class="active"
>已售出订单</router-link>
<router-link
to="/account/orders"
class="side-link"
active-class="active"
>已购买订单列表</router-link>
<router-link
to="/account/rechargeRecord"
class="side-link"
active-class="active"
>充值记录</router-link>
<router-link
to="/account/withdrawalHistory"
class="side-link"
active-class="active"
>提现记录</router-link>
</nav>
</aside>
<!-- 右侧内容 -->
<section class="content">
<router-view />
</section>
</div>
</div>
</template>
<script>
export default {
name: "AccountPage",
data() {
return {
activeIndex: '1',
userEmail: '',
}
},
computed: {
/**
* 计算用户邮箱首字母用于头像
* @returns {string}
*/
userInitial() {
const email = (this.userEmail || '').trim()
return email ? email[0].toUpperCase() : '?'
},
},
mounted() {
const getVal = (key) => {
const raw = localStorage.getItem(key)
if (raw == null) return null
try { return JSON.parse(raw) } catch (e) { return raw }
}
const val = getVal('userName') || getVal('userEmail') || ''
this.userEmail = typeof val === 'string' ? val : String(val)
},
};
</script>
<style scoped>
.account-page {
padding: 20px;
}
.account-header {
background: #fff;
/* border: 1px solid #eee; */
border-radius: 8px;
padding: 16px 20px;
margin-bottom: 16px;
text-align: left;
padding-left: 3vw;
}
.title {
margin: 0;
font-size: 20px;
font-weight: 700;
color: #2c3e50;
}
.account-layout {
display: grid;
grid-template-columns: 220px 1fr;
gap: 16px;
}
.sidebar {
background: #fff;
border: 1px solid #eee;
border-radius: 8px;
padding: 12px;
min-height: 80vh;
}
.side-nav {
display: flex;
flex-direction: column;
gap: 8px;
}
/* 用户信息卡片:置于导航最前,展示邮箱与首字母头像 */
.user-info-card {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
gap: 10px;
padding: 12px;
background: #f8fafc;
border: 1px solid #eee;
border-radius: 8px;
margin-bottom: 4px;
}
.avatar {
width: 36px;
height: 36px;
border-radius: 50%;
background: linear-gradient(135deg, #42b983, #67c23a);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 14px;
}
.user-email {
font-size: 14px;
color: #2c3e50;
font-weight: 600;
}
.side-link {
display: block;
padding: 10px 12px;
color: #2c3e50;
text-decoration: none;
border-radius: 6px;
transition: background 0.2s;
}
.side-link:hover {
background: #f6f8fa;
}
.side-link.active {
background: #42b983;
color: #fff;
}
.content {
background: #fff;
border: 1px solid #eee;
border-radius: 8px;
padding: 16px;
min-height: 420px;
}
@media (max-width: 768px) {
.account-layout {
grid-template-columns: 1fr;
}
}
</style>