<template>
|
<div class="right-panel">
|
<div class="right-panel-top">
|
<div class="data-card">
|
<div class="data-header flex">
|
<div class="data-title">本月新增用户</div>
|
<div class="data-tabs">
|
<div class="tab-value">{{ newUsers }}<span class="unit">户</span></div>
|
<div class="tab-chart"></div>
|
</div>
|
</div>
|
</div>
|
<div class="data-card">
|
<div class="data-header flex">
|
<div class="data-title">本季度交租率</div>
|
<div class="data-tabs">
|
<div class="tab-value">{{ quarterlyRate }}<span class="unit">元</span></div>
|
<div class="tab-chart"></div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="right-panel-top1">
|
<div class="data-card">
|
<div class="data-header flex">
|
<div class="data-title">本月新增用户</div>
|
<div class="data-tabs">
|
<div class="tab-value">{{ newUsers }}<span class="unit">万元</span></div>
|
<div class="tab-chart"></div>
|
</div>
|
</div>
|
</div>
|
<div class="data-card">
|
<div class="data-header flex">
|
<div class="data-title">本季度交租率</div>
|
<div class="data-tabs">
|
<div class="tab-value">{{ quarterlyRate }}<span class="unit">万元</span></div>
|
<div class="tab-chart"></div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="status-list">
|
<div class="status-title">实时租赁数据</div>
|
<div class="status-items-container">
|
<div class="status-items">
|
<div v-for="(item, index) in rentList" :key="index" class="status-item">
|
<span class="area-name">{{ item.area }}</span>
|
<div class="status-actions">
|
<span class="action-btn">启用中</span>
|
<span class="action-btn">合同签署</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
name: 'RightPanel',
|
data() {
|
return {
|
newUsers: '877',
|
quarterlyRate: '4302',
|
rentList: [
|
{ area: '新城大道', status: 'online' },
|
{ area: '拉萨路', status: 'offline' },
|
{ area: '新城大道', status: 'online' },
|
{ area: '拉萨路', status: 'online' },
|
{ area: '新城大道', status: 'offline' },
|
{ area: '拉萨路', status: 'online' },
|
{ area: '新城大道', status: 'offline' },
|
{ area: '新城大道', status: 'online' }
|
]
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
.flex {
|
display: flex;
|
flex-direction: column;
|
}
|
|
.right-panel {
|
width: 300px;
|
display: flex;
|
position: fixed;
|
top: 0;
|
right: 0;
|
height: calc(100vh - 100px);
|
margin-top: 100px;
|
z-index: 1000;
|
flex-direction: column;
|
gap: 10px;
|
}
|
|
.data-card {
|
background: rgba(255, 255, 255, 0.05);
|
border-radius: 8px;
|
padding: 15px;
|
height: 80px;
|
}
|
|
.data-header {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
}
|
|
.data-title {
|
font-size: 16px;
|
}
|
|
.data-tabs {
|
display: flex;
|
align-items: center;
|
gap: 10px;
|
}
|
|
.tab-value {
|
font-size: 30px;
|
font-family: 'DIN ', 'DIN', sans-serif;
|
font-weight: bold;
|
color: #fff;
|
}
|
|
.right-panel-top {
|
display: flex;
|
background: rgba(146, 146, 146, 0.5);
|
margin-top: 50px;
|
padding-top: 10px;
|
padding-bottom: 30px;
|
border-radius: 2px;
|
margin-right: 20px;
|
border-left: 4px solid #87F7C7;
|
}
|
|
.right-panel-top1 {
|
display: flex;
|
background: rgba(146, 146, 146, 0.5);
|
margin-top: 10px;
|
padding-top: 10px;
|
padding-bottom: 30px;
|
border-radius: 2px;
|
margin-right: 20px;
|
border-left: 4px solid #FFB822;
|
}
|
|
.status-list {
|
background: rgba(146, 146, 146, 0.5);
|
border-radius: 2px;
|
margin-right: 20px;
|
margin-top: 10px;
|
padding: 15px;
|
height: 500px;
|
overflow: hidden;
|
}
|
|
.status-title {
|
font-size: 16px;
|
}
|
|
.status-items {
|
display: flex;
|
flex-direction: column;
|
gap: 10px;
|
height: calc(100% - 45px);
|
animation: scrollUp 20s linear infinite;
|
}
|
|
.status-items:hover {
|
animation-play-state: paused;
|
}
|
|
.status-items-container {
|
height: 100%;
|
overflow: hidden;
|
}
|
|
@keyframes scrollUp {
|
0% {
|
transform: translateY(0);
|
}
|
|
100% {
|
transform: translateY(-50%);
|
}
|
}
|
|
.status-items::-webkit-scrollbar {
|
display: none;
|
}
|
|
.status-items {
|
-ms-overflow-style: none;
|
scrollbar-width: none;
|
}
|
|
.status-item {
|
display: flex;
|
justify-content: space-between;
|
align-items: center;
|
background: rgba(255, 255, 255, 0.05);
|
border-radius: 4px;
|
}
|
|
.area-name {
|
font-size: 12px;
|
}
|
|
.status-actions {
|
display: flex;
|
gap: 10px;
|
}
|
|
.action-btn {
|
padding: 2px 8px;
|
border-radius: 4px;
|
font-size: 12px;
|
background: rgba(0, 255, 255, 0.2);
|
}
|
|
.unit {
|
font-size: 14px;
|
margin-left: 4px;
|
color: #fff;
|
}
|
</style>
|