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/customStringcustom
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’ 时生效Booleantrue
customAddressTitle自定义地址选择文案,type=‘custom’ 时生效string‘请选择所在地区’
existAddressTitle已有地址文案 ,type=‘exist’ 时生效string‘配送至’
customAndExistTitle自定义地址与已有地址切换按钮文案 ,type=‘exist’ 时生效string‘选择其他地址’

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/customexist/custom
data选择地址的值,custom 时,addressStr 为选择的地址组合{}
',29),o={expose:[],setup:n=>(n,o)=>(e(),t("div",d,[s]))};export default o;