猫妈狗爸伴宠师小程序前端代码
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.
 
 
 
 

363 lines
8.2 KiB

<template>
<view class="personal-pet">
<view v-if="petList.length > 0" class="personal-pet-list">
<view v-for="(item, index) in petList" :key="index">
<view
:class="['personal-pet-list-item', item.sex === 0 ? 'personal-pet-list-item_backgroud_m' : 'personal-pet-list-item_backgroud_f' ]">
<view class="personal-pet-info">
<view>
<u-avatar :src="item.headImage || defaultPhoto" size="60" shape="circle"></u-avatar>
</view>
<view class="personal-pet-info-1">
<view class="personal-pet-info-2">
<view class="personal-pet-name">
{{ item.nickName }}
</view>
<view class="personal-pet-sex">
<img :src="item.sex === 0 ? '../../../static/images/sex/boy.svg' : '../../../static/images/sex/girl.svg'"
alt="sex" style="width: 16px;height: 16px;" />
</view>
</view>
<view class="personal-pet-info-3" style="width: 100%;">
<view style="max-width: 35%;">
{{ item.type || '未知' }}
</view>
<view class="personal-pet-info-age" style="max-width: 90px;">
{{ item.age || '未知' }}
</view>
<view style="max-width: 25%;">
体重{{ item.weight }}kg
</view>
</view>
</view>
</view>
<view class="personal-pet-info-disposition ellipsis">
性格: {{ item.personality }}
</view>
<view class="personal-pet-info-btns">
<view class="personal-pet-info-btn" @click="editPet(item)">
<u-icon name="edit-pen" color="#7d8196" size="16" style="margin-right: 5px;"></u-icon>
<view style="margin-left: 5px;">
编辑
</view>
</view>
<view class="personal-pet-info-btn" @click="deletePet(item)">
<u-icon name="trash" color="#7d8196" size="16"></u-icon>
<view style="margin-left: 5px;">
删除
</view>
</view>
</view>
</view>
</view>
</view>
<view v-else class="personal-pet-none">
<img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/catdog.png" alt="pet"
style="width: 149px;height: 124px;" mode="widthFix" />
<view class="personal-pet-none-text">这里还没有您的宠物,请点击添加吧~</view>
</view>
<view class="personal-pet-add">
<button class="personal-pet-add-btn" @click="addPet">
<view style="font-size: 16px;font-weight: 500;">
添加宠物
</view>
</button>
</view>
<view>
<u-picker :show="show" :columns="petTypes" @confirm="petTypeChange" @cancel="cancel"
:immediateChange="true"></u-picker>
</view>
<u-modal :show="showDel" @confirm="confirmDel" @cancel="cancelDel" ref="uModal" showCancelButton
:asyncClose="true" :content="delContent"></u-modal>
</view>
</template>
<script setup>
import {
ref,
onMounted,
computed
} from 'vue';
// import {
// getDictList
// } from "@/api/system/user.js"
import {
getpetList,
delByPetId
} from "@/api/pet/index.js";
import {
useRouter
} from 'vue-router';
import {
onShow,
onPullDownRefresh
} from '@dcloudio/uni-app'
import {
useStore
} from "vuex"
const store = useStore();
const userInfo = computed(() => {
return store.getters.userInfo
})
const router = useRouter();
const defaultPhoto = ref('https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/catdog.png');
const petList = ref([]);
const show = ref(false);
const showDel = ref(false);
const petTypes = ref([
[
'猫咪', '狗狗'
]
]);
const delContent = ref('');
const deleteId = ref('');
const petType = ref('');
const getPetList = async () => {
petList.value = [];
try {
const res = await getpetList({
userId: userInfo.value.userId
});
if (res && res.data) {
petList.value = res.data;
showDel.value = false;
}
} catch (error) {
console.error('获取宠物列表失败', error);
}
};
// const getPetTypeList = async () => {
// try {
// const res = await getDictList('pet_type');
// if (res.code === 200) {
// const petType = res.data.map(e => e.dictLabel);
// petTypes.value = [petType];
// } else {
// console.error('获取pet type失败');
// }
// } catch (error) {
// console.error('获取pet type列表失败', error);
// }
// };
const addPet = () => {
show.value = true;
};
const cancel = () => {
show.value = false;
};
const petTypeChange = (e) => {
petType.value = e.value[0];
show.value = false;
if (petType.value === '猫咪') {
uni.navigateTo({
url: "/otherPages/userManage/pet/petInfo?petType=0&optionType=add&userId="+userInfo.value.userId
})
}
if (petType.value === '狗狗') {
uni.navigateTo({
url: "/otherPages/userManage/pet/petInfo?petType=1&optionType=add&userId="+userInfo.value.userId
})
}
};
const editPet = (item) => {
if (item.petType === '猫咪' || item.petType === 0) {
uni.navigateTo({
url: `/otherPages/userManage/pet/petInfo?petType=0&optionType=edit&petId=${item.id}`
})
}
if (item.petType === '狗狗' || item.petType === 1) {
uni.navigateTo({
url: `/otherPages/userManage/pet/petInfo?petType=1&optionType=edit&petId=${item.id}`
})
}
};
const deletePet = (item) => {
delContent.value = "确定要删除" + item.nickName + '?';
showDel.value = true;
deleteId.value = item.id;
};
const confirmDel = async () => {
try {
await delByPetId({
id: deleteId.value
});
getPetList();
} catch (error) {
console.error('删除宠物失败', error);
}
};
const cancelDel = () => {
showDel.value = false;
deleteId.value = '';
};
// onMounted(() => {
// // getPetTypeList();
// getPetList();
// });
onShow(() => {
getPetList();
});
onPullDownRefresh(() => {
getPetList();
});
</script>
<style lang="scss" scoped>
.personal-pet {
position: relative;
height: 100%;
padding-bottom: 90px;
.personal-pet-add {
box-sizing: border-box;
background-color: #FFFFFF;
padding: 20rpx 20rpx 40rpx 20rpx;
width: 100%;
height: 160rpx;
position: fixed;
bottom: 0;
z-index: 100;
display: flex;
.personal-pet-add-btn {
width: 100%;
height: 90rpx;
border-radius: 6px;
background: #FFB13F;
font-size: 16px;
color: #FFFFFF;
}
}
.personal-pet-list {
.personal-pet-list-add {
width: 100%;
height: 44px;
background-color: #FFFFFF;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 15px;
.personal-pet-list-add-btn {
font-size: 14px;
color: #AAA;
display: flex;
align-items: center;
}
}
.personal-pet-list-item_backgroud_m {
background: linear-gradient(179deg, #EDF5FE 0.75%, #FFF 34.11%);
}
.personal-pet-list-item_backgroud_f {
background: linear-gradient(179deg, #FFF4F6 0.75%, #FFF 34.11%);
}
.personal-pet-list-item {
margin: 10px 10px 0 10px;
border-radius: 5px;
padding: 20px 10px 10px;
.personal-pet-info {
display: flex;
align-items: center;
justify-content: flex-start;
.personal-pet-info-1 {
margin-left: 10px;
width: calc(100% - 60px);
.personal-pet-info-2 {
display: flex;
flex-wrap: wrap;
.personal-pet-name {
color: #333;
font-size: 16px;
margin-right: 10px;
}
}
.personal-pet-info-3 {
display: flex;
align-items: baseline;
font-size: 14px;
margin-top: 5px;
color: #7D8196;
.personal-pet-info-age {
padding: 0 10px;
margin: 0 10px;
border-left: solid 2px #7D8196;
border-right: solid 2px #7D8196;
}
}
}
}
.personal-pet-info-disposition {
padding: 10px;
color: #7D8196;
font-size: 14px;
background: #f9f9f9;
border-radius: 5px;
margin-top: 10px;
}
.personal-pet-info-btns {
display: flex;
justify-content: flex-end;
margin-top: 10px;
.personal-pet-info-btn {
display: flex;
font-size: 14px;
color: #7D8196;
margin-left: 20px;
}
}
}
}
.personal-pet-none {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
margin-top: 40%;
.personal-pet-none-text {
color: #666;
text-align: center;
font-size: 14px;
width: 100%;
margin-top: 10px;
}
}
}
</style>