地址选择
该组件用于从地址列表中选择地址。通过弹出框显示地址列表,用户点击地址后,会更新选择的地址并发出选择事件。该组件还会在加载时从API获取用户地址列表,并设置第一个地址作为默认选择。
源码解析
展示地址
相关信息
大约 3 分钟
该组件用于从地址列表中选择地址。通过弹出框显示地址列表,用户点击地址后,会更新选择的地址并发出选择事件。该组件还会在加载时从API获取用户地址列表,并设置第一个地址作为默认选择。
相关信息
-- auto-generated definition
create table address
(
id varchar(36) not null
primary key,
created_time datetime(6) not null,
edited_time datetime(6) not null,
creator_id varchar(36) not null,
editor_id varchar(36) not null,
latitude double not null,
longitude double not null,
address varchar(255) not null,
province varchar(255) not null,
city varchar(255) not null,
district varchar(255) not null,
phone_number varchar(255) not null,
real_name varchar(255) not null,
top tinyint(1) not null,
details varchar(255) not null
);
export default defineAppConfig({
pages: [
"pages/index/index",
"pages/user/index",
"pages/address/address-list",
"pages/address/address-save",
],
// 忽略...
plugins: {
chooseLocation: {
version: "1.0.10",
provider: "wx76a9a06e5b4e693e",
},
},
permission: {
"scope.userLocation": {
desc: "你的位置将用于确认收货地址",
},
},
requiredPrivateInfos: ["getLocation"],
});
<script setup lang="ts">
import { AddressDto } from "@/apis/__generated/model/dto";
defineProps<{ address: AddressDto["AddressRepository/SIMPLE_FETCHER"] }>();
</script>
<template>
<!-- 前面展示地址和收件人信息,后面提供操作按钮插槽 -->
<div class="address-row">
<div class="address-info">
<!-- 上面展示地址信息 -->
<div class="details">{{ address.address + " " + address.details }}</div>
<!-- 下面展示收件人信息 -->
<div class="connector">
<div class="real-name">{{ address.realName }}</div>
<div class="phone-number">{{ address.phoneNumber }}</div>
<!-- 是否是默认地址 -->
<div class="is-default" v-if="address.top">
<nut-tag type="primary" plain>默认</nut-tag>
</div>
</div>
</div>
<slot name="operation"></slot>
</div>
</template>
<style lang="scss">
.address-row {
padding: 30rpx;
background: white;
display: flex;
align-items: center;
.address-info {
width: 600rpx;
.details {
font-size: 30rpx;
font-weight: bold;
margin-bottom: 10rpx;
}
.connector {
font-size: 28rpx;
color: rgba(black, 0.3);
display: flex;
align-items: center;
.real-name {
margin-right: 30rpx;
}
.is-default {
margin-left: 20px;
}
}
}
}
</style>