美文网首页
PC地址选择器

PC地址选择器

作者: RemenberMe | 来源:发表于2020-12-14 11:52 被阅读0次

import React, {useEffect, useState} from 'react';
import {CascaderSelect} from '@alifd/next';
import PropTypes from 'prop-types';
import {ProvinciaCascade} from '@api/publicInterface';
import useRequest from "@hooks/useRequest";

/**
* 1580043700@qq.com
* Zhang Jun
* createDate: 2020-12-11
* @param props
* @returns {*}
* @constructor 地址选择器,暂时不需要多选,后期有需求再加。
*/
const params = {token: sessionStorage.getItem('token')};

function Address(props) {
   const {showSearch, onChange, disabled, value, dataSource, placeholder, resultAutoWidth, hasClear, depth} = props;
   const [source, setSource] = useState([]);

   const {data} = useRequest(ProvinciaCascade, params);


   useEffect(() => {
       if (!dataSource) {
           setSource(formatData(data, depth));
       } else {
           setSource(dataSource);
       }
   }, [dataSource, data]);

   return (
       <CascaderSelect
           hasClear={hasClear}
           resultAutoWidth={resultAutoWidth}
           showSearch={showSearch}
           onChange={!!onChange && onChange}
           dataSource={dataSource ?? source}
           value={value && value[depth - 1]}
           disabled={disabled}
           placeholder={placeholder}
       />
   );
}

const formatData = (data, depth) => {
   if (!data || data.length === 0) {
       return [];
   }
   return format(data, depth);
};

const format = (data, depth) => {
   depth -= 1;
   if (depth === -1) {
       return null;
   }
   if (data) {
       return data.map((v) => {
           return {label: v.name, value: v.id, children: format(v.data, depth)};
       });
   } else {
       return null;
   }
};

Address.defaultProps = {
   resultAutoWidth: false,
   showSearch: false,
   value: [],
   disabled: false,
   hasClear: true,
   depth: 3,
};

Address.propTypes = {
   onChange: PropTypes.func, //值改变
   dataSource: PropTypes.array, //数据源,不传递则使用后台接口数据
   value: PropTypes.array, //选中的数据
   disabled: PropTypes.bool, //是否禁用
   placeholder: PropTypes.string, //输入提示
   depth: PropTypes.number, //地址显示深度1-3(省市区),默认显示3(省市区)
   showSearch: PropTypes.bool, //显示搜素,默认false
   hasClear: PropTypes.bool, //是否可清空,默认true
   resultAutoWidth: PropTypes.bool, // 搜索结果列表是否和选择框等宽,默认false
};

export default Address;

相关文章

  • PC地址选择器

  • PC端地址选择器(省、市、区)

    前言:项目需要使用PC版的地址选择器,本想直接找一个插件,但网上大多是移动端的,与PC端功能要求不符,不符PC端比...

  • Part 2-2 CSS选择器

    CSS选择器概况 CSS选择器类似于地址,通过选择器的地址作用到标签里. 基础选择器 元素选择器 根据指定的元素,...

  • swift-日期选择器

    继上篇地址选择器,日期选择器同样继承自PickerBaseView。 PickerBaseView详情参见地址(省...

  • windows7安装Virtual PC虚拟机

    Virtual PC下载地址 xpmode下载地址

  • USG6000配置

    组网结构 pc1 到 pc4 使用dhcp获取IP地址,pc5 地址为192.168.50.2 LSW1 开启dh...

  • Swift.地址选择器

    实现效果: controller弹出时:半透明背景渐变展示.地址选择器从下方弹出. 地址选择器:以省份,城市,地区...

  • CSS选择器

    CSS选择器常见的有几种? 基础选择器 组合选择器 代码地址 属性选择器常用的为E[attr = value] ...

  • 网络——静态路由(路由配路由)

    设置好拓扑图 设置pc7 ip地址为192.168.1.1 pc8 ip地址为192.168.2.1 中间线路设置...

  • 网络——动态路由

    设置好拓扑图 设置pc7 ip地址为192.168.1.1 pc8 ip地址为192.168.2.1 中间线路设置...

网友评论

      本文标题:PC地址选择器

      本文链接:https://www.haomeiwen.com/subject/yakvgktx.html