98 lines
2.1 KiB
Vue
98 lines
2.1 KiB
Vue
<template>
|
|
<view class="pets-container">
|
|
<u-navbar title="我的宠物" :border="false" bg-color="#ffffff">
|
|
<template #right>
|
|
<u-icon name="plus-circle-fill" color="#ff6b6b" size="24" @click="addPet"></u-icon>
|
|
</template>
|
|
</u-navbar>
|
|
|
|
<view class="pets-list" v-if="petsList.length > 0">
|
|
<u-card v-for="pet in petsList" :key="pet.id" :margin="20" :padding="20" @click="viewPetDetail(pet)">
|
|
<view class="pet-card-content">
|
|
<u-avatar :src="pet.avatar || '/static/default-pet.png'" size="60" shape="circle"></u-avatar>
|
|
<view class="pet-info">
|
|
<u-text :text="pet.name" type="primary" size="16" bold></u-text>
|
|
<u-text :text="pet.breed" type="info" size="14"></u-text>
|
|
<u-text :text="`${pet.age}岁 · 陪伴${pet.companionDays}天`" type="tips" size="12"></u-text>
|
|
</view>
|
|
<view class="pet-actions">
|
|
<u-button type="primary" size="mini" @click.stop="addRecord(pet)">记录</u-button>
|
|
</view>
|
|
</view>
|
|
</u-card>
|
|
</view>
|
|
|
|
<u-empty v-else mode="data" text="还没有添加宠物哦">
|
|
<template #bottom>
|
|
<u-button type="primary" text="添加第一只宠物" @click="addPet"></u-button>
|
|
</template>
|
|
</u-empty>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
petsList: []
|
|
}
|
|
},
|
|
onShow() {
|
|
this.loadPets()
|
|
},
|
|
methods: {
|
|
loadPets() {
|
|
try {
|
|
const pets = uni.getStorageSync('pets') || []
|
|
this.petsList = pets
|
|
} catch (error) {
|
|
console.error('加载宠物列表失败', error)
|
|
this.petsList = []
|
|
}
|
|
},
|
|
addPet() {
|
|
uni.navigateTo({
|
|
url: '/pages/pets/add-pet'
|
|
})
|
|
},
|
|
viewPetDetail(pet) {
|
|
uni.navigateTo({
|
|
url: `/pages/pets/pet-detail?id=${pet.id}`
|
|
})
|
|
},
|
|
addRecord(pet) {
|
|
uni.navigateTo({
|
|
url: `/pages/pets/add-record?petId=${pet.id}`
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.pets-container {
|
|
background-color: #f8f9fa;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.pet-card-content {
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.pet-info {
|
|
flex: 1;
|
|
margin-left: 20rpx;
|
|
|
|
/deep/ .u-text {
|
|
margin-bottom: 8rpx;
|
|
}
|
|
}
|
|
|
|
.pet-actions {
|
|
margin-left: 20rpx;
|
|
}
|
|
}
|
|
|
|
|
|
</style>
|