|
|
- <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>
|