敢为人鲜小程序前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

210 lines
5.0 KiB

<template>
<view class="assets-page">
<!-- 导航栏 -->
<navbar title="资产明细" leftClick @leftClick="$utils.navigateBack" bgColor="#019245" color="#fff" />
<!-- diy的tab栏 -->
<uv-sticky>
<view class="tab-container">
<view class="tab-wrapper">
<view
v-for="(item, index) in list"
:key="index"
class="tab-item"
:class="{ active: currentTab === index }"
@click="switchTab(index)"
>
{{ item.name }}
</view>
<!-- 滑块 -->
<view class="tab-slider" :style="{ left: currentTab * 50 + '%' }" />
</view>
</view>
</uv-sticky>
<!-- 交易记录列表 -->
<view class="transaction-list">
<view class="transaction-item" v-for="item in incomeList" :key="item.id">
<!-- 左侧图标和类型 -->
<view class="item-left">
<view class="icon-container">
<uv-icon name="empty-coupon" color="#019245" size="44"></uv-icon>
</view>
<view class="item-info">
<view class="item-type">{{ item.type }}</view>
<view class="item-time">{{ item.time }}</view>
</view>
</view>
<!-- 右侧金额 -->
<view class="item-amount income">¥{{ item.amount }}</view>
</view>
</view>
</view>
</template>
<script>
import navbar from '@/components/base/navbar.vue'
import { assetsData, assetsDataForHead } from '@/static/js/mockAssets.js'
export default {
components: {
navbar
},
data() {
return {
currentTab: 0, // 0-收入明细 1-支出明细
incomeList: [],
expenseList: [],
list: [
{
name: '收入明细',
},
{
name: '支出明细',
}
],
Data: []
}
},
onLoad() {
const identity = uni.getStorageSync('identity')
if (identity) {
// 从mock数据获取收入和支出明细
this.Data = assetsDataForHead
} else {
// 从mock数据获取收入和支出明细
this.Data = assetsData
}
this.switchTab(0)
},
methods: {
// 切换标签
switchTab(index) {
this.currentTab = index
// 切换显示的列表
if (index === 0) {
this.incomeList = this.Data.incomeList
} else {
this.incomeList = this.Data.expenseList
}
}
}
}
</script>
<style lang="scss" scoped>
.assets-page {
// min-height: 100vh;
// background-color: #f5f5f5;
}
.transaction-list {
padding: 0 20rpx;
// background-color: #fff;
}
.transaction-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx 10rpx;
border-bottom: 1rpx solid #E0E0E0;
&:last-child {
border-bottom: none;
}
.item-left {
display: flex;
align-items: center;
.icon-container {
width: 70rpx;
height: 70rpx;
border-radius: 50%;
// background-color: rgba(1, 146, 69, 0.1);
display: flex;
justify-content: center;
align-items: center;
margin-right: 20rpx;
border: 4rpx solid $uni-color ;
}
.item-info {
.item-type {
font-size: 30rpx;
color: #333;
margin-bottom: 6rpx;
font-weight: 600;
}
.item-time {
font-size: 24rpx;
color: #949494;
}
}
}
.item-amount {
font-size: 32rpx;
font-weight: 500;
&.income {
color: $uni-color-second;
}
&.expense {
color: #333;
}
}
}
// 添加tab样式
.tab-container {
width: 100%;
// background-color: #fff;
padding: 30rpx 0;
}
.tab-wrapper {
display: flex;
position: relative;
width: 90%;
height: 68rpx;
margin: 0 auto;
background-color: #cfcfcf;
border-radius: 42rpx;
overflow: hidden;
margin-bottom: 20rpx;
}
.tab-item {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
font-size: 28rpx;
color: #333;
position: relative;
z-index: 1;
transition: color 0.3s;
&.active {
color: #fff;
font-weight: 500;
}
}
.tab-slider {
position: absolute;
width: 50%;
height: 100%;
background-color: $uni-color;
border-radius: 42rpx;
top: 0;
transition: left 0.3s cubic-bezier(0.35, 0, 0.25, 1);
z-index: 0;
}
</style>