@51yzone/pc-components
Version:
An enterprise-class UI design language and React-based implementation
292 lines (236 loc) • 9.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
require("antd/lib/cascader/style");
var _cascader = _interopRequireDefault(require("antd/lib/cascader"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _lodash = require("lodash");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
/**
* 关键字:授权区域选择
* 新增人:徐友万
* 完善中
*/
// 格式化树节点
var formatData = function formatData(treeNode, loadKey) {
return treeNode.map(function (item) {
// 兼容两种是否是叶子节点的判断
var isLeaf = true;
if ((0, _lodash.has)(item, 'leaf')) {
isLeaf = item.leaf;
} else if ((0, _lodash.has)(item, 'isLeaf')) {
isLeaf = item.isLeaf;
}
return {
label: item.name,
key: item[loadKey],
value: item[loadKey],
isLeaf: isLeaf,
children: undefined,
loading: false
};
});
};
var AreaCascader = function AreaCascader(props) {
var _props$value = props.value,
value = _props$value === void 0 ? [] : _props$value,
_props$options = props.options,
options = _props$options === void 0 ? [] : _props$options,
_props$loadKey = props.loadKey,
loadKey = _props$loadKey === void 0 ? 'code' : _props$loadKey,
needFormat = props.needFormat,
needFillData = props.needFillData,
loadTopData = props.loadTopData,
loadData = props.loadData,
prefixCls = props.prefixCls,
className = props.className,
style = props.style,
children = props.children,
rest = __rest(props, ["value", "options", "loadKey", "needFormat", "needFillData", "loadTopData", "loadData", "prefixCls", "className", "style", "children"]);
var ref = (0, _react.useRef)(0); // 第一级节点初始化
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
topDataInit = _useState2[0],
setTopDataInit = _useState2[1]; // 数据回填初始化
var _useState3 = (0, _react.useState)(false),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
fillDataInit = _useState4[0],
setFillDataInit = _useState4[1]; // 区域选择树节点
var _useState5 = (0, _react.useState)(options),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
newOptions = _useState6[0],
setNewOptions = _useState6[1]; // 异步加载节点数据
var handleLoadData = function handleLoadData(selectedOptions) {
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var targetOption, res, data, newData;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
targetOption = selectedOptions[selectedOptions.length - 1];
targetOption.loading = true;
if (!loadData) {
_context.next = 13;
break;
}
_context.next = 5;
return loadData(targetOption.value);
case 5:
res = _context.sent;
targetOption.loading = false;
data = res.valueObj || res.value;
if (!data) {
_context.next = 13;
break;
}
newData = needFormat ? formatData(data, loadKey) : data;
targetOption.children = newData;
setNewOptions((0, _toConsumableArray2["default"])(newOptions));
return _context.abrupt("return", newData);
case 13:
return _context.abrupt("return", []);
case 14:
case "end":
return _context.stop();
}
}
}, _callee);
}));
}; // 异步数据回填
var handleFillData = function handleFillData(parentOptions) {
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var data, res;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
data = parentOptions.filter(function (option) {
return option.value === value[ref.current];
});
_context2.next = 3;
return handleLoadData(data);
case 3:
res = _context2.sent;
ref.current += 1;
if (res && ref.current !== value.length - 1) {
handleFillData(res);
}
case 6:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
}; // 初始化第一级树节点
(0, _react.useEffect)(function () {
var getTopData = function getTopData() {
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
var res, data, newData;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (!loadTopData) {
_context3.next = 6;
break;
}
_context3.next = 3;
return loadTopData();
case 3:
res = _context3.sent;
data = res.valueObj || res.value;
if (data && data.length) {
newData = needFormat ? formatData(data, loadKey) : data;
setNewOptions(newData);
setTopDataInit(true);
}
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
};
getTopData();
}, []); // 需要回填数据 递归创建树结构
(0, _react.useEffect)(function () {
if (topDataInit && !fillDataInit && value.length && needFillData) {
setFillDataInit(true);
handleFillData(newOptions);
}
}, [value, topDataInit, fillDataInit, needFillData]);
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])(className, "".concat(prefixCls, "-wrapper")),
style: style
}, /*#__PURE__*/_react["default"].createElement(_cascader["default"], (0, _extends2["default"])({
loadData: handleLoadData,
value: value,
options: newOptions
}, rest)), children);
};
AreaCascader.defaultProps = {
options: [],
loadKey: 'code',
needFormat: true,
needFillData: false,
loadTopData: function loadTopData() {
return Promise.resolve({});
},
loadData: function loadData() {
return Promise.resolve({});
},
prefixCls: 'yz-area-cascader',
className: '',
style: {}
};
var _default = AreaCascader;
exports["default"] = _default;