UNPKG

@aliretail/react-materials-components

Version:
281 lines (253 loc) 8.04 kB
import _CascaderSelect from "@alifd/next/es/cascader-select"; import _Balloon from "@alifd/next/es/balloon"; import _Icon from "@alifd/next/es/icon"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { getAreaByCode } from "./model"; import { mergeRegionCodes } from "./util"; var AreaSelect = /*#__PURE__*/function (_Component) { _inheritsLoose(AreaSelect, _Component); function AreaSelect(props) { var _this; _this = _Component.call(this, props) || this; _this.state = { areaList: [] }; _this.onLoadData = function (data) { var _this$props = _this.props, appCode = _this$props.appCode, areaApi = _this$props.areaApi, areaApiUrl = _this$props.areaApiUrl; var code = (data === null || data === void 0 ? void 0 : data.value) || ''; return getAreaByCode(appCode, areaApi, areaApiUrl, code).then(function (result) { var newList = result.map(function (item) { return { label: item.name, value: item.code, // 如果有 isLeaf 则判断 isLeaf 为叶子节点 // 否则当 divLevel 为 4 的时候,认为是最后一级、即叶子节点 (兼容之前版本) isLeaf: typeof item.isLeaf === 'undefined' ? item.divLevel === 4 : item.isLeaf, tips: item.tips }; }); if (data) { data._source.children = newList; } else { _this.setState({ areaList: newList }); } }); }; _this.handleCityData = function (data, extra) { var indeterminateData = extra.indeterminateData; var value = data.value; var obj = { id: value, city: { value: data.label }, area: { value: '全部' }, street: { value: '全部' }, province: {} }; indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === value; })) { obj.province.value = t.label; } }); return obj; }; _this.handleAreaData = function (data, extra) { var indeterminateData = extra.indeterminateData; var areaValue = data.value; var obj = { id: areaValue, area: { value: data.label }, street: { value: '全部' }, city: {}, province: {} }; var cityValue = ''; indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === areaValue; })) { obj.city.value = t.label; cityValue = t.value; } }); indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === cityValue; })) { obj.province.value = t.label; } }); return obj; }; _this.handleStreetData = function (data, extra) { var indeterminateData = extra.indeterminateData; var streetValue = data.value; var obj = { id: streetValue, area: {}, street: {}, city: {}, province: {} }; var cityValue = ''; var areaValue = ''; indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === streetValue; })) { obj.area.value = t.label; areaValue = t.value; } }); indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === areaValue; })) { obj.city.value = t.label; cityValue = t.value; } }); indeterminateData.length && indeterminateData.forEach(function (t) { if (t.children && t.children.some(function (item) { return item.value === cityValue; })) { obj.province.value = t.label; } }); obj.street.value = data.label; return obj; }; _this.handleData = function (data, extra) { var list = []; data.length && data.forEach(function (t) { var pos = t.pos; // 当前选择数据层级 var posList = pos.split('-'); if (posList.length === 2) { // 当前选择全省 var obj = { id: t.value, province: { value: t.label }, city: { value: '全部' }, area: { value: '全部' }, street: { value: '全部' } }; list.push(obj); } else if (posList.length === 3) { // 当前选择为全市 var _obj = _this.handleCityData(t, extra); list.push(_obj); } else if (posList.length === 4) { // 当前选择为全区 var _obj2 = _this.handleAreaData(t, extra); list.push(_obj2); } else { // 当前选择为街道 var _obj3 = _this.handleStreetData(t, extra); list.push(_obj3); } }); return list; }; _this.handleChange = function (value) { // const list = this.handleData(data, extra); // mergeRegionCodes _this.props.handleChange(mergeRegionCodes(value)); }; _this.onLoadData(); return _this; } /** * 异步加载地域组件的选项 * @param data 选中的值,如果没有的话视为初次渲染 */ var _proto = AreaSelect.prototype; _proto.render = function render() { var initValues = this.props.initValues; var areaList = this.state.areaList; var itemRender = function itemRender(item) { var defaultTrigger = /*#__PURE__*/React.createElement(_Icon, { type: "prompt", className: "iconStyle" }); if (item.tips) { return /*#__PURE__*/React.createElement("span", { className: "areaItemStyle" }, item.label, /*#__PURE__*/React.createElement(_Balloon, { trigger: defaultTrigger, closable: false }, item.tips)); } return /*#__PURE__*/React.createElement("span", null, item.label); }; var valueRenderFun = function valueRenderFun(item) { // 当改项目没有 label 则直接显示该项的 name if (item !== null && item !== void 0 && item.label) { return item.label; } else if (Array.isArray(initValues) && initValues.length) { var initValuesItem = initValues.find(function (t) { return t.code === item.value; }); return initValuesItem ? initValuesItem.name : ''; } }; return /*#__PURE__*/React.createElement(_CascaderSelect, { dataSource: areaList, multiple: true // showSearch // 本期去除搜索 , valueRender: valueRenderFun, defaultValue: initValues.map(function (t) { return t.code; }), itemRender: itemRender // 自定义渲染 , loadData: this.onLoadData // 异步加载 , onChange: this.handleChange, placeholder: "\u8BF7\u8F93\u5165\u7701/\u5E02/\u533A\u8FDB\u884C\u641C\u7D22\u6216\u9009\u62E9", style: { width: 360 }, listStyle: { width: '150px' }, listClassName: "aliretail-cascaderSelectStyle" }); }; return AreaSelect; }(Component); AreaSelect.propTypes = { handleChange: PropTypes.func // 区域选择事件 }; AreaSelect.defaultProps = { handleChange: function handleChange() {}, appCode: 'retailforce_oms_pro', areaApi: 'list_town_cover_info', initValues: [] }; export default AreaSelect;