import{c as t,o as e,A as n}from"./vendor.80bf15c7.js";const d={class:"markdown-body"},s=n('
address组件
介绍
按需加载请加载对应依赖组件 Icon Popup
安装
import { createApp } from 'vue';\nimport { Address, Icon, Popup } from '@nutui/nutui';\n\nconst app = createApp();\napp.use(Address);\napp.use(Icon);\napp.use(Popup);\n\n
代码演示
选择自定义地址
<nut-cell title="选择地址" :desc="text" is-link @click="showAddress"></nut-cell>\n<nut-address\n v-model:show="showPopup"\n :province="province"\n :city="city"\n :country="country"\n :town="town"\n @on-change="onChange"\n @close="close"\n customAddressTitle="请选择所在地区"\n></nut-address>\n
setup() {\n const showPopup = ref(false);\n const address = reactive({\n province:[\n { id: 1, name: '北京' },\n { id: 2, name: '广西' },\n { id: 3, name: '江西' },\n { id: 4, name: '四川' }\n ],\n city:[\n { id: 7, name: '朝阳区' },\n { id: 8, name: '崇文区' },\n { id: 9, name: '昌平区' },\n { id: 6, name: '石景山区' }\n ],\n country:[\n { id: 3, name: '八里庄街道' },\n { id: 9, name: '北苑' },\n { id: 4, name: '常营乡' }\n ],\n town:[]\n })\n\n const text = ref('请选择地址')\n\n const showAddress = () => {\n showPopup.value = !showPopup.value;\n };\n\n const onChange = (cal) => {\n const name = address[cal.next]\n if (name.value.length < 1) {\n showPopup.value = false;\n }\n };\n const close = val => {\n console.log(val);\n text.value = val.data.addressStr;\n };\n\n return { showPopup, text, showAddress, onChange, close, ...toRefs(address) };\n}\n
选择已有地址
<nut-cell title="选择地址" :desc="text" is-link @click="showAddressExist"></nut-cell>\n<nut-address\n v-model:show="showPopupExist"\n type="exist"\n :existAddress="existAddress"\n @close="close"\n :isShowCustomAddress="false"\n @selected="selected"\n existAddressTitle="配送至"\n></nut-address>\n
setup() {\n const showPopupExist = ref(false);\n const existAddress = ref([\n {\n id: 1,\n addressDetail: 'th ',\n cityName: '石景山区',\n countyName: '城区',\n provinceName: '北京',\n selectedAddress: true,\n townName: ''\n },{\n id: 2,\n addressDetail: '12_ ',\n cityName: '电饭锅',\n countyName: '扶绥县',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n },{\n id: 3,\n addressDetail: '发大水比 ',\n cityName: '放到',\n countyName: '广宁街道',\n provinceName: '钓鱼岛全区',\n selectedAddress: false,\n townName: ''\n },{\n id: 4,\n addressDetail: '还是想吧百度吧 ',\n cityName: '研发',\n countyName: '八里庄街道',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n }\n ]);\n\n const text = ref('请选择地址')\n\n const showAddressExist = () => {\n showPopupExist.value = true;\n };\n\n const close = val => {\n if (val.type == 'exist') {\n const {provinceName,cityName,countyName,townName,addressDetail} = val.data\n text.value = provinceName + cityName + countyName + townName + addressDetail;\n } else {\n text.value = val.data.addressStr;\n }\n };\n\n const selected = (prevExistAdd, nowExistAdd, arr) => {\n console.log(prevExistAdd);\n console.log(nowExistAdd);\n };\n\n return { showPopupExist, existAddress, showAddressExist, text, close, selected };\n}\n
自定义图标
<nut-cell title="选择地址" :desc="text" is-link @click="showCustomImg"></nut-cell>\n<nut-address\n v-model:show="showPopupCustomImg"\n type="exist"\n :existAddress="existAddress"\n @close="close"\n :isShowCustomAddress="false"\n @selected="selected3"\n :defaultIcon="defaultIcon"\n :selectedIcon="selectedIcon"\n :closeBtnIcon="closeBtnIcon"\n></nut-address>\n
setup() {\n const showPopupCustomImg = ref(false);\n const icon = reactive({\n selectedIcon: 'heart-fill',\n defaultIcon: 'heart1',\n closeBtnIcon: 'close',\n backBtnIcon: 'left'\n });\n const existAddress = ref([\n {\n id: 1,\n addressDetail: 'th ',\n cityName: '石景山区',\n countyName: '城区',\n provinceName: '北京',\n selectedAddress: true,\n townName: ''\n },{\n id: 2,\n addressDetail: '12_ ',\n cityName: '电饭锅',\n countyName: '扶绥县',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n },{\n id: 3,\n addressDetail: '发大水比 ',\n cityName: '放到',\n countyName: '广宁街道',\n provinceName: '钓鱼岛全区',\n selectedAddress: false,\n townName: ''\n },{\n id: 4,\n addressDetail: '还是想吧百度吧 ',\n cityName: '研发',\n countyName: '八里庄街道',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n }\n ]);\n\n const text = ref('请选择地址')\n\n const showCustomImg = () => {\n showPopupCustomImg.value = true;\n };\n\n const close = val => {\n if (val.type == 'exist') {\n const {provinceName,cityName,countyName,townName,addressDetail} = val.data\n text.value = provinceName + cityName + countyName + townName + addressDetail;\n } else {\n text.value = val.data.addressStr;\n }\n };\n\n const selected = (prevExistAdd, nowExistAdd, arr) => {\n console.log(prevExistAdd);\n console.log(nowExistAdd);\n };\n\n return { showPopupCustomImg, existAddress, text, showCustomImg, close, selected, ...toRefs(icon) };\n}\n
自定义地址与已有地址切换
<nut-cell title="选择地址" :desc="text" is-link @click="showAddressOther"></nut-cell>\n<nut-address\n v-model:show="showPopupOther"\n type="exist"\n :existAddress="existAddress"\n :province="province"\n :city="city"\n :country="country"\n :town="town"\n :backBtnIcon="backBtnIcon"\n @close="close"\n @selected="selected"\n customAndExistTitle="选择其他地址"\n @switchModule="switchModule"\n @closeMask="closeMask"\n></nut-address>\n
setup() {\n const showPopupOther = ref(false);\n const address = reactive({\n province:[\n { id: 1, name: '北京' },\n { id: 2, name: '广西' },\n { id: 3, name: '江西' },\n { id: 4, name: '四川' }\n ],\n city:[\n { id: 7, name: '朝阳区' },\n { id: 8, name: '崇文区' },\n { id: 9, name: '昌平区' },\n { id: 6, name: '石景山区' }\n ],\n country:[\n { id: 3, name: '八里庄街道' },\n { id: 9, name: '北苑' },\n { id: 4, name: '常营乡' }\n ],\n town:[]\n })\n const existAddress = ref([\n {\n id: 1,\n addressDetail: 'th ',\n cityName: '石景山区',\n countyName: '城区',\n provinceName: '北京',\n selectedAddress: true,\n townName: ''\n },\n {\n id: 2,\n addressDetail: '12_ ',\n cityName: '电饭锅',\n countyName: '扶绥县',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n },\n {\n id: 3,\n addressDetail: '发大水比 ',\n cityName: '放到',\n countyName: '广宁街道',\n provinceName: '钓鱼岛全区',\n selectedAddress: false,\n townName: ''\n },\n {\n id: 4,\n addressDetail: '还是想吧百度吧 ',\n cityName: '研发',\n countyName: '八里庄街道',\n provinceName: '北京',\n selectedAddress: false,\n townName: ''\n }\n ]);\n const backBtnIcon = ref('left')\n const text = ref('请选择地址')\n\n const showAddressOther = () => {\n showPopupOther.value = true;\n };\n\n const close = val => {\n if (val.type == 'exist') {\n const {provinceName,cityName,countyName,townName,addressDetail} = val.data\n text.value = provinceName + cityName + countyName + townName + addressDetail;\n } else {\n text.value = val.data.addressStr;\n }\n };\n\n const selected = (prevExistAdd, nowExistAdd, arr) => {\n console.log(prevExistAdd);\n console.log(nowExistAdd);\n };\n\n const switchModule = cal => {\n if (cal.type == 'custom') {\n console.log('点击了“选择其他地址”按钮');\n } else {\n console.log('点击了自定义地址左上角的返回按钮');\n }\n };\n\n const closeMask = val => {\n console.log('关闭弹层', val);\n };\n\n return { showPopupOther, text, showAddressOther, switchModule, closeMask, close, selected, backBtnIcon, ...toRefs(address) };\n}\n
API
| 字段 | 说明 | 类型 | 默认值 |
|---|
| v-model:show | 是否打开地址选择 | String | ‘’ |
| type | 地址选择类型 exist/custom | String | custom |
| province | 省,每个省的对象中,必须有 name 字段 | Array | [] |
| city | 市,每个市的对象中,必须有 name 字段 | Array | [] |
| country | 县,每个县的对象中,必须有 name 字段 | Array | [] |
| town | 乡/镇,每个乡/镇的对象中,必须有 name 字段 | Array | [] |
| existAddress | 已存在地址列表,每个地址对象中,必传值provinceName、cityName、countyName、townName、addressDetail、selectedAddress(字段解释见下) | Array | [] |
| defaultIcon | 已有地址列表默认图标,type=‘exist’ 时生效 | string | ‘’ |
| selectedIcon | 已有地址列表选中图标,type=‘exist’ 时生效 | string | ‘’ |
| closeBtnIcon | 自定义关闭弹框按钮图标 | string | - |
| backBtnIcon | 自定义地址与已有地址切换时,自定义返回的按钮图标 | string | - |
| isShowCustomAddress | 是否可以切换自定义地址选择,type=‘exist’ 时生效 | Boolean | true |
| customAddressTitle | 自定义地址选择文案,type=‘custom’ 时生效 | string | ‘请选择所在地区’ |
| existAddressTitle | 已有地址文案 ,type=‘exist’ 时生效 | string | ‘配送至’ |
| customAndExistTitle | 自定义地址与已有地址切换按钮文案 ,type=‘exist’ 时生效 | string | ‘选择其他地址’ |
- provinceName 省的名字
- cityName 市的名字
- countyName 县的名字
- townName 乡/镇的名字
- addressDetail 具体地址
- selectedAddress 字段用于判断当前地址列表的选中项。
Event
| 字段 | 说明 | 回调参数 |
|---|
| onChange | 自定义选择地址时,选择地区时触发 | 参考 onChange |
| selected | 选择已有地址列表时触发 | 参考 selected |
| close | 地址选择弹框关闭时触发 | 参考 close |
| closeMask | 点击遮罩层或点击右上角叉号关闭时触发 | {closeWay:‘mask’/‘cross’} |
| switchModule | 点击‘选择其他地址’或自定义地址选择左上角返回按钮触发 | {type:‘exist’/‘custom’} |
onChange 回调参数
| 参数 | 说明 | 可能值 |
|---|
| custom | 当前点击的行政区域 | province(省) / city(市) / country(县) / town(乡) |
| next | 当前点击的行政区域的下一级 | province(省) / city(市) / country(县) / town(乡) |
| value | 当前点击的行政区域的值(返回传入的值) | {} |
selected 回调参数
| 参数 | 说明 | 可能值 |
|---|
| 第一个参数(prevExistAdd) | 选择前选中的地址 | {} |
| 第二个参数(nowExistAdd) | 当前选中的地址 | {} |
| 第三个参数(arr) | 选择完之后的已有地址列表(selectedAddress 值发生改变) | {} |
close 回调参数
| 参数 | 说明 | 可能值 |
|---|
| type | 地址选择类型 exist/custom | exist/custom |
| data | 选择地址的值,custom 时,addressStr 为选择的地址组合 | {} |
',29),o={expose:[],setup:n=>(n,o)=>(e(),t("div",d,[s]))};export default o;