UNPKG

antui-admin

Version:
688 lines (565 loc) 21.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _button = require('antd/lib/button'); var _button2 = _interopRequireDefault(_button); require('antd/lib/button/style/css'); var _checkbox = require('antd/lib/checkbox'); var _checkbox2 = _interopRequireDefault(_checkbox); require('antd/lib/checkbox/style/css'); var _input = require('antd/lib/input'); var _input2 = _interopRequireDefault(_input); require('antd/lib/input/style/css'); var _tree = require('antd/lib/tree'); var _tree2 = _interopRequireDefault(_tree); require('antd/lib/tree/style/css'); var _spin = require('antd/lib/spin'); var _spin2 = _interopRequireDefault(_spin); require('antd/lib/spin/style/css'); var _treeTitle = require('./treeTitle'); var _treeTitle2 = _interopRequireDefault(_treeTitle); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Search = _input2.default.Search; var TreeNode = _tree2.default.TreeNode; /** * 双栏穿梭选择框 其中,左边一栏为Tree */ var AsyncTreetransfer = function (_React$Component) { (0, _inherits3.default)(AsyncTreetransfer, _React$Component); function AsyncTreetransfer(props) { (0, _classCallCheck3.default)(this, AsyncTreetransfer); var _this = (0, _possibleConstructorReturn3.default)(this, (AsyncTreetransfer.__proto__ || (0, _getPrototypeOf2.default)(AsyncTreetransfer)).call(this, props)); _initialiseProps.call(_this); var _this$_init = _this._init(props), treeData = _this$_init.treeData, listData = _this$_init.listData, treeLeafKeys = _this$_init.treeLeafKeys, treeSelectLeaf = _this$_init.treeSelectLeaf, treeSelectLeafKeys = _this$_init.treeSelectLeafKeys; _this.state = { treeData: treeData, listData: listData, treeLeafKeys: treeLeafKeys, treeSelectLeaf: treeSelectLeaf, treeSelectLeafKeys: treeSelectLeafKeys, expandedKeys: [], listCheckNodes: [], autoExpandParent: true, treeLoading: false, searchValue: "", searching: false }; return _this; } // init (0, _createClass3.default)(AsyncTreetransfer, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { var _init = this._init(nextProps), treeData = _init.treeData, listData = _init.listData, treeLeafKeys = _init.treeLeafKeys, treeSelectLeaf = _init.treeSelectLeaf, treeSelectLeafKeys = _init.treeSelectLeafKeys; this.setState({ treeData: treeData, listData: listData, treeLeafKeys: treeLeafKeys, treeSelectLeaf: treeSelectLeaf, treeSelectLeafKeys: treeSelectLeafKeys }); } // tree init // // select all children nodes // canel select all childr nen nodes // list checkbox click // list checkbox all click // _handleTreeToList // list delete // list search // tree search // tree load data }, { key: 'render', value: function render() { var _this2 = this; var _props = this.props, title = _props.title, targetKeys = _props.targetKeys, leafCount = _props.leafCount, showSearch = _props.showSearch, searchPlaceholder = _props.searchPlaceholder; var _state = this.state, treeLoading = _state.treeLoading, treeData = _state.treeData, listData = _state.listData, treeSelectLeaf = _state.treeSelectLeaf, listCheckNodes = _state.listCheckNodes; var listBodyStyle = (0, _classnames2.default)({ "antui-treetransfer-list-body": true, "antui-treetransfer-list-body-has-search": showSearch }); return _react2.default.createElement( 'div', { className: 'antui-treetransfer' }, _react2.default.createElement( 'div', { className: 'antui-treetransfer-list antui-treetransfer-left' }, _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-header' }, _react2.default.createElement( 'span', { className: 'antui-treetransfer-list-header-select' }, treeSelectLeaf.length === 0 ? leafCount : treeSelectLeaf.length + '/' + leafCount, ' \u6761\u6570\u636E' ), _react2.default.createElement( 'span', { className: 'antui-treetransfer-list-header-title' }, _react2.default.createElement( 'span', null, title[0] ) ) ), _react2.default.createElement( 'div', { className: listBodyStyle }, showSearch ? _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-body-search' }, _react2.default.createElement(Search, { placeholder: searchPlaceholder, onSearch: this._handleTreeSearch }) ) : null, _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-body-content' }, treeLoading ? _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-loading' }, _react2.default.createElement(_spin2.default, null) ) : this._generateTreeNodes(treeData) ) ) ), _react2.default.createElement( 'div', { className: 'antui-treetransfer-operation' }, _react2.default.createElement(_button2.default, { type: 'primary', icon: 'right', size: 'small', disabled: treeSelectLeaf.length === 0, onClick: this._handleTreeToList }), _react2.default.createElement(_button2.default, { type: 'primary', icon: 'left', size: 'small', disabled: listCheckNodes.length === 0, onClick: this._handleListToTree }) ), _react2.default.createElement( 'div', { className: 'antui-treetransfer-list antui-treetransfer-right' }, _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-header' }, _react2.default.createElement(_checkbox2.default, { onClick: this._handleListCheckAll, indeterminate: listCheckNodes.length > 0 && listCheckNodes.length < targetKeys.length, checked: listCheckNodes.length > 0 && listCheckNodes.length === targetKeys.length }), _react2.default.createElement( 'span', { className: 'antui-treetransfer-list-header-select' }, listCheckNodes.length === 0 ? targetKeys.length : listCheckNodes.length + '/' + targetKeys.length, ' \u6761\u6570\u636E' ), _react2.default.createElement( 'span', { className: 'antui-treetransfer-list-header-title' }, _react2.default.createElement( 'span', null, title[1] ) ) ), _react2.default.createElement( 'div', { className: listBodyStyle }, showSearch ? _react2.default.createElement( 'div', { className: 'antui-treetransfer-list-body-search' }, _react2.default.createElement(Search, { placeholder: searchPlaceholder, onSearch: this._handleListSearch }) ) : null, _react2.default.createElement( 'ul', { className: 'antui-treetransfer-list-body-content' }, listData.map(function (_ref) { var key = _ref.key, title = _ref.title; return _react2.default.createElement( 'li', { key: key, className: 'list' }, _react2.default.createElement(_checkbox2.default, { onClick: function onClick(e) { return _this2._handleListCheck(e, { key: key, title: title }); }, checked: listCheckNodes.filter(function (_ref2) { var _k = _ref2.key; return _k === key; }).length > 0 }), _react2.default.createElement( 'span', null, title ) ); }) ) ) ) ); } }]); return AsyncTreetransfer; }(_react2.default.Component); AsyncTreetransfer.propTypes = { /** 标题集合 */ title: _react.PropTypes.array, /** 数据源,其中的数据将会被渲染到左侧框(Tree)中 */ dataSource: _react.PropTypes.array, /** 显示在右侧框数据的key集合 */ targetKeys: _react.PropTypes.array, /** 左侧框树叶子节点的长度 */ leafCount: _react.PropTypes.number, /** 选项在左栏向右栏转移或者右栏数据更改时的回调函数 */ onChange: _react.PropTypes.func, /** 异步数据加载与查询 */ onLoadTree: _react.PropTypes.func, /** 是否显示搜索框 */ showSearch: _react.PropTypes.bool, /** 搜索框的默认值 */ searchPlaceholder: _react.PropTypes.string, /** 指定数据列的key */ rowKey: _react.PropTypes.string, /** 指定数据列的title */ rowTitle: _react.PropTypes.string, /** 指定数据列的children */ rowChildren: _react.PropTypes.string }; AsyncTreetransfer.defaultProps = { title: ['源数据', '目的数据'], dataSource: [], targetKeys: [], leafCount: 0, showSearch: false, searchPlaceholder: '请输入搜索内容', rowKey: 'key', rowTitle: 'title', rowChildren: 'children' }; var _initialiseProps = function _initialiseProps() { var _this3 = this; this._init = function (_ref3) { var dataSource = _ref3.dataSource, targetKeys = _ref3.targetKeys, rowKey = _ref3.rowKey, rowTitle = _ref3.rowTitle; // get leaf keys var listKeys = targetKeys.map(function (_ref4) { var key = _ref4.key; return key; }); var treeLeafKeys = []; var treeSelectLeaf = []; var treeSelectLeafKeys = []; var loop = function loop(data) { return data.map(function (item) { var children = item[_this3.props.rowChildren], key = item[_this3.props.rowKey]; if (children === undefined) { treeLeafKeys.push(key); if (listKeys.indexOf(key) > -1) { treeSelectLeaf.push(item); treeSelectLeafKeys.push(key); } } else { loop(item.children); } }); }; loop(dataSource); return { treeData: dataSource, listData: targetKeys, treeLeafKeys: treeLeafKeys, treeSelectLeaf: treeSelectLeaf, treeSelectLeafKeys: treeSelectLeafKeys }; }; this._generateTreeNodes = function (treeData) { var _state2 = _this3.state, searching = _state2.searching, searchValue = _state2.searchValue; var expandedKeys = []; var loop = function loop(data) { return data.map(function (item) { var children = item[_this3.props.rowChildren], key = item[_this3.props.rowKey], title = item[_this3.props.rowTitle], others = (0, _objectWithoutProperties3.default)(item, [_this3.props.rowChildren, _this3.props.rowKey, _this3.props.rowTitle]); if (children === undefined) { var _title = _react2.default.createElement( 'span', null, title ); // search value higlight if (searchValue !== "" && title.indexOf(searchValue) > -1) { var index = title.indexOf(searchValue); expandedKeys.push(key); _title = _react2.default.createElement( 'span', null, title.substr(0, index), _react2.default.createElement( 'span', { style: { color: '#f50' } }, searchValue ), title.substr(index + searchValue.length) ); } return _react2.default.createElement(TreeNode, (0, _extends3.default)({ key: key, name: title, title: _title, isLeaf: true }, others)); } else { var treeTitleProps = { title: title, onSelect: function onSelect(e) { return _this3._parentNodeSelect(e, key, children); }, onCanel: function onCanel(e) { return _this3._parentNodeCanel(e, key, children); } }; return _react2.default.createElement( TreeNode, (0, _extends3.default)({ key: key, title: _react2.default.createElement(_treeTitle2.default, treeTitleProps) }, others), loop(item.children) ); } }); }; var treeNodes = loop(treeData); var treeProps = { checkable: false, multiple: true, onSelect: _this3._handleTreeSelect, selectedKeys: _this3.state.treeSelectLeafKeys, loadData: _this3._treeLoadData, expandedKeys: searching ? expandedKeys : _this3.state.expandedKeys, autoExpandParent: searchValue !== "" ? true : _this3.state.autoExpandParent, onExpand: function onExpand(keys) { // console.log(keys); _this3.setState({ expandedKeys: keys, autoExpandParent: false }); } }; return _react2.default.createElement( _tree2.default, treeProps, treeNodes ); }; this._handleTreeSelect = function (selectedKeys, _ref5) { var selectedNodes = _ref5.selectedNodes; // console.log(selectedNodes); var treeSelectLeafKeys = selectedKeys.filter(function (_k) { return _this3.state.treeLeafKeys.indexOf(_k) > -1; }); var treeSelectLeaf = selectedNodes.map(function (_ref6) { var key = _ref6.key, props = _ref6.props; var title = props.name, isLeaf = props.isLeaf; if (isLeaf) { return { key: key, title: title }; } }).filter(function (_v) { return _v !== undefined; }); // console.log(treeSelectLeaf); _this3.setState({ treeSelectLeafKeys: treeSelectLeafKeys, treeSelectLeaf: treeSelectLeaf }); }; this._getLeafNodes = function (dt) { var _keys = []; var _nodes = []; // console.log(dt); var loop = function loop(data) { return data.forEach(function (item) { var children = item[_this3.props.rowChildren], key = item[_this3.props.rowKey]; if (children === undefined) { _keys.push(key); _nodes.push(item); } else { loop(item.children); } }); }; loop([dt]); return { _keys: _keys, _nodes: _nodes }; }; this._parentNodeSelect = function (e, key, children) { e.preventDefault(); e.stopPropagation(); new _promise2.default(function (resolve) { _this3.props.onLoadTree && _this3.props.onLoadTree({ type: '_load', value: key, resolve: resolve }); }).then(function () { var _getLeafNodes = _this3._getLeafNodes({ key: key, children: children }), _keys = _getLeafNodes._keys, _nodes = _getLeafNodes._nodes; var _state3 = _this3.state, treeSelectLeaf = _state3.treeSelectLeaf, treeSelectLeafKeys = _state3.treeSelectLeafKeys; _this3.setState({ treeSelectLeaf: [].concat((0, _toConsumableArray3.default)(_nodes.filter(function (_ref7) { var key = _ref7.key; return treeSelectLeafKeys.indexOf(key) === -1; })), (0, _toConsumableArray3.default)(treeSelectLeaf)), treeSelectLeafKeys: [].concat((0, _toConsumableArray3.default)(treeSelectLeafKeys), (0, _toConsumableArray3.default)(_keys)) }); }); }; this._parentNodeCanel = function (e, key, children) { e.preventDefault(); e.stopPropagation(); var _getLeafNodes2 = _this3._getLeafNodes({ key: key, children: children }), _keys = _getLeafNodes2._keys; var _state4 = _this3.state, treeSelectLeaf = _state4.treeSelectLeaf, treeSelectLeafKeys = _state4.treeSelectLeafKeys; _this3.setState({ treeSelectLeaf: treeSelectLeaf.filter(function (_ref8) { var key = _ref8.key; return _keys.indexOf(key) === -1; }), treeSelectLeafKeys: treeSelectLeafKeys.filter(function (_k) { return _keys.indexOf(_k) === -1; }) }); }; this._handleListCheck = function (e, _ref9) { var key = _ref9.key, title = _ref9.title; if (e.target.checked) { _this3.setState({ listCheckNodes: [].concat((0, _toConsumableArray3.default)(_this3.state.listCheckNodes), [{ key: key, title: title }]) }); } else { _this3.setState({ listCheckNodes: _this3.state.listCheckNodes.filter(function (_ref10) { var _k = _ref10.key; return _k !== key; }) }); } }; this._handleListCheckAll = function (e) { if (e.target.checked) { _this3.setState({ listCheckNodes: _this3.props.targetKeys }); } else { _this3.setState({ listCheckNodes: [] }); } }; this._handleTreeToList = function () { var _state5 = _this3.state, treeSelectLeaf = _state5.treeSelectLeaf, treeSelectLeafKeys = _state5.treeSelectLeafKeys; var _props2 = _this3.props, targetKeys = _props2.targetKeys, onChange = _props2.onChange; onChange && onChange([].concat((0, _toConsumableArray3.default)(targetKeys.filter(function (_ref11) { var key = _ref11.key; return treeSelectLeafKeys.indexOf(key) === -1; })), (0, _toConsumableArray3.default)(treeSelectLeaf))); }; this._handleListToTree = function () { // delete tree clicked var treeSelectLeafKeys = _this3.state.treeSelectLeafKeys; _this3.setState({ listCheckNodes: [] }); _this3.props.onChange && _this3.props.onChange(_this3.props.targetKeys.filter(function (_ref12) { var key = _ref12.key; return treeSelectLeafKeys.indexOf(key) === -1; })); }; this._handleListSearch = function (searchValue) { if (searchValue === "") { var _init2 = _this3._init(_this3.props), listData = _init2.listData; _this3.setState({ listData: listData }); } else { _this3.setState({ listData: _this3.state.listData.filter(function (_ref13) { var title = _ref13.title; return title.indexOf(searchValue) > -1; }) }); } }; this._handleTreeSearch = function (searchValue) { var _init3 = _this3._init(_this3.props), treeData = _init3.treeData; // no search if (searchValue === "") { _this3.setState({ searchValue: "", treeData: treeData, autoExpandParent: false }); } else { // load tree search if (_this3.props.onLoadTree) { new _promise2.default(function (resolve) { _this3.setState({ treeLoading: true, searching: true }); _this3.props.onLoadTree && _this3.props.onLoadTree({ type: '_search', value: searchValue, resolve: resolve }); }).then(function () { _this3.setState({ treeLoading: false }); }); } _this3.setState({ searchValue: searchValue }); } }; this._treeLoadData = function (treeNode) { return new _promise2.default(function (resolve) { _this3.props.onLoadTree && _this3.props.onLoadTree({ type: '_expand', value: treeNode, resolve: resolve }); }); }; }; exports.default = AsyncTreetransfer; module.exports = exports['default'];