<template> <up-popup :show="show" closeable round="10" @close="close"> <view class="address-popup"> <view class="head-title">收货人与详细地址</view> <view class="list-admin"> <view>常用地址</view> <view class="admin-btn"> <view class="btn" @click="navTo('/pagesOrder/addressList/addressList')"><up-icon name="edit-pen" color="#20B128"></up-icon>管理</view> <view class="btn" @click="navTo('/pagesOrder/addressEdit/addressEdit')"><up-icon name="plus" color="#20B128"></up-icon>新增</view> </view> </view> <scroll-view style="height: 600rpx;padding-bottom: 20rpx;" scroll-y> <view class="row" v-for="(item,index) in list" :key="index" @click="addressType=item.address_id"> <view class="content"> <view class="top"> <view class="name">{{item.real_name}}</view> <view class="phone">{{item.phone}}</view> <u-tag v-if="item.is_default" style="pointer-events: none;" text="默认" type="success" plain size="mini"></u-tag> </view> <view class="bottom u-line-2">{{item.detail}}</view> </view> <image v-if="addressType==item.address_id" src="@/static/icon/check.png"></image> <image v-else src="@/static/icon/n-check.png"></image> </view> </scroll-view> <up-button color="#20B128" shape="circle" @click="submitAddress">确认</up-button> </view> </up-popup> </template> <script setup> import { ref } from "vue" const addressType = ref(-1) const props = defineProps({ show: { type: Boolean, default: false }, list: { type: Array, default: () => [] }, }) const emit = defineEmits(['close', 'change']); const close = () => { emit('close'); } const submitAddress = () => { let e = props.list.find(item=>item.address_id==addressType.value); if(addressType.value<=0 || !e) return uni.$u.toast('请选择地址'); emit('change', e); } const navTo = (url) => { uni.navigateTo({ url: url }) } const setCheck = (e)=>{ addressType.value = e; } defineExpose({ setCheck }) </script> <style scoped lang="scss"> .address-popup { padding: 30rpx; .head-title { font-weight: bold; text-align: center; margin-bottom: 20rpx; } .list-admin { display: flex; justify-content: space-between; margin-bottom: 20rpx; .admin-btn { display: flex; color: #20B128; .btn { margin-left: 20rpx; display: flex; align-items: center; &:active { color: rgba(#20B128, 0.8); transition: background-color 0.5s; animation: disappear 0.5s 0.5s forwards; } } } } .row { display: flex; align-items: center; justify-content: space-between; padding-bottom: 20rpx; border-bottom: 1rpx solid #f6f6f6; margin-bottom: 20rpx; &:last-child { border-bottom: none; margin-bottom: 0; } .content { .top { display: flex; view { margin-right: 20rpx; } } .bottom {} } image { width: 40rpx; height: 40rpx; flex-shrink: 0; } } } @keyframes disappear { to { opacity: 0; /* 渐隐 */ transform: scale(0); /* 缩小 */ } } </style>