import { ScrollView, Text, View } from "@tarojs/components"; import { memo, ReactHTMLElement, useEffect, useRef, useState } from "react"; import Drawer from "@/components/popup"; import styles from "./index.module.scss" import classnames from "classnames"; import Taro from "@tarojs/taro"; type Params = { addressOnSelect?: ({}:{name: string, id:string|number}) => void, addressOnClose?: () => void, show?: true|false } export default memo(({ addressOnSelect, addressOnClose, show = false }: Params) => { const list1 = [ { name:'广东1', id:1 }, { name:'广东2', id:2 }, { name:'广东3', id:3 }, { name:'广东4', id:4 }, { name:'广东5', id:5 }, { name:'广东6', id:6 } ] const list2 = [ { name:'佛山1佛山1佛山1佛山1佛山1', id:7 }, { name:'佛山2', id:8 }, { name:'佛山3', id:9 }, { name:'佛山4', id:10 }, { name:'佛山5', id:11 }, { name:'佛山6', id:12 } ] const list3 = [ { name:'禅城区1', id:13 }, { name:'禅城区2', id:14 }, { name:'禅城区3', id:15 }, { name:'禅城区4', id:16 }, { name:'禅城区5', id:17 }, { name:'禅城区6', id:18 } ] const [list, setList] = useState(list1) const [selectIndex, setSelectIndex] = useState(0) //0 省, 1 市,2 区 const [selectId, setSelectId] = useState(0) //选中的id const [selectArr, setSelectArr] = useState([]) //选中的省市区 const [cityStatus, setCityStatus] = useState(false) //城市是否存在 const [areaStatus, setAreaStatus] = useState(false) //区镇是否存在 const [bottomStyle, setBottomStyle] = useState({width:'100rpx',left:'0rpx'}) //底部滚动条样式 //选中内容 const selectItem = (item) => { setSelectId(item.id) if(selectIndex == 0) { setSelectArr([item]) getCity() setAreaStatus(false) setCityStatus(false) } else if(selectIndex == 1){ setSelectArr([selectArr[0], item]) area() } else { setSelectArr([selectArr[0], selectArr[1], item]) } } //选中标题 const onSelectIndex = (index) => { setSelectIndex(index) const selectid = selectArr[index]?selectArr[index].id:0 setSelectId(selectid) } useEffect(() => { if(selectIndex == 0) { setList(list1) // getDomDes('#address_tab_0') } else if (selectIndex == 1) { getCity() } else { area() } }, [selectIndex]) //获取市 const getCity = () => { setTimeout(() => { if(list2.length > 0) { setSelectIndex(1) setList(() => { return list2 }) setCityStatus(true) getDomDes('#address_tab_1') } else { setCityStatus(false) } },10) } //获取区 const area = () => { // setAreaStatus(false) setTimeout(() => { if(list3.length > 0) { setSelectIndex(2) setList(() => { return list3 }) setAreaStatus(true) getDomDes('#address_tab_2') } else { setAreaStatus(false) } },10) } //确定按钮 const submitSelect = () => { addressOnClose?.() addressOnSelect?.(selectArr) } //获取省市区宽度 const getDomDes = (id) => { Taro.nextTick(() => { let query = Taro.createSelectorQuery(); query.select(id).boundingClientRect(rect=>{ let left = rect.left; let clientWidth = rect.width; setBottomStyle({ width: clientWidth + 'px', left: left + 'px' }) }).exec(); }) } //点击标题栏 const selectTab = (index) => { onSelectIndex(index) getDomDes('#address_tab_'+index) } return ( <> addressOnClose?.()}> addressOnClose?.()}>取消 submitSelect()}>确定 selectTab(0)} className={classnames(styles.address_item, {[styles.addresst_select]:(selectIndex == 0)})}>{selectArr[0]?selectArr[0].name:'请选择'} {cityStatus&& selectTab(1)} className={classnames(styles.address_item, {[styles.addresst_select]:(selectIndex == 1)})}>{selectArr[1]?selectArr[1].name:'请选择'}} {areaStatus&& selectTab(2)} className={classnames(styles.address_item, {[styles.addresst_select]:(selectIndex == 2)})}>{selectArr[2]?selectArr[2].name:'请选择'}} {list.map(item => { return ( selectItem(item)} className={classnames(styles.address_list_item, {[styles.addresst_select]:(selectId == item.id)})}> {item.name} {(selectId == item.id)&&} ) })} ) })